2014-02-03 7 views
0

У меня есть куча формул, которые я хочу извлечь из pdf-файла. Формулы предшествует описанию формулы следующим образом:Все EXCEPT в perl regex

Revenues (IQ_REV_UTI) 
Other Revenues, Total (IQ_OTHER_REV_UTI) 
Total Revenues (IQ_TOTAL_REV_UTI) 

Я просто хочу, чтобы захватить все внутри скобок (т.е. IQ_REV_UTI).

Я могу сопоставить все, что хочу, с использованием следующего регулярного выражения: IQ\w+ Однако программа, которую я использую на моем mac (называемые шаблоны), не позволяет мне извлекать согласованный текст. Это позволяет мне находить и заменять. Поэтому мне нужно найти способ сопоставить все, кроме того, что я хочу извлечь. Я могу заменить его ничем и, надеюсь, я останусь с тем, что мне нужно (т. Е. Просто форумла внутри скобок). Кроме того, существуют ли какие-либо другие программы регулярного выражения, которые позволяют мне просто извлекать согласованный текст?

+1

Как вы используете регулярное выражение? Не могли бы вы показать нам какой-то код? – Toto

+0

Ваши данные отформатированы, когда в настоящее время отображается изменение или как вы его разместили? – Kenosis

ответ

3

Я не уверен, я понимаю ваш вопрос, но вы можете использовать Grep, как это:

grep -Eo "IQ\w+" yourfile 
IQ_REV_UTI 
IQ_OTHER_REV_UTI 
IQ_TOTAL_REV_UTI 

В свете вашего пересмотренным поста, я чувствую, вы можете использовать только поиск и замену в вашем приложении, и внешние скрипты/инструменты вам не помогут. Итак, как об этом:

search for ".*(" and replace with "nothing" 
search for ").*" and replace with "nothing" 

В зависимости от моделей приложение принимает, строка поиска может быть

"*(" 
".*(" 

и

").*" 
")*" 
+0

Обновлено ... см. Новую вторую часть. –

0

Вы можете использовать регулярное выражение, например, так:

use warnings; 
use strict; 

my @file = ('Revenues (IQ_REV_UTI)', 'Other Revenues, Total (IQ_OTHER_REV_UTI)', 'Total Revenues (IQ_TOTAL_REV_UTI)', 'Line with no brackets...'); 

foreach (@file){ 
    my ($info) = /\((.+?)\)/; 
    print "$info\n" if $info; 
} 

Отпечатки :

IQ_REV_UTI 
IQ_OTHER_REV_UTI 
IQ_TOTAL_REV_UTI 
+0

См. Вопрос edit, образец ввода был по нескольким строкам. Кроме того, ваше регулярное выражение захватывает скобки. – RobEarl

+0

@RobEarl - Я предполагал, что OP этого захочет. См. Обновление ... – fugu

0

извинения, но я не программирование. Я использую приложение, которое позволяет вам использовать регулярное выражение для поиска и замены текста. Я не думаю, что могу использовать любые предлагаемые функции программирования, такие как grep или что-то еще. Я просто задавался вопросом, есть ли способ подобрать все, кроме как просто через регулярное выражение.