2012-03-22 2 views
0

В основном существует два типа линий (упрощенный):Perl регулярное выражение для вывода строк, не содержащих символ

"Джон" (2002)

Amy (1991)

Там может или не может быть вкладками в начале. Я хочу получить строки, не содержащие двойных кавычек. До сих пор я

if(/([^\t]*) [\t]+ ^("(.*?)") ([^\t]+ [\ ]* [\(][\d]+[\)])/) 

Если я вынимаю знак карата, он будет захватывать строки с двойными кавычками. Я хочу, чтобы это делалось наоборот, но оно не работает.

+0

Должен ли он быть Perl? '' sed '/'/d 'inputfile.txt'' –

ответ

1
^[^"]*$ 

С модификатором, которые позволяют^$ матч на линии ломает

я первоначально предложил lookaround но его здесь не нужен

^((?!").)*$) 
+0

В нем используется метод, называемый позитивным взглядом, который вы можете прочитать здесь http://www.regular-expressions.info/lookaround.html В Perl для получения массива все совпадения регулярных выражений в строке используют @result = $ subject = ~ m /^(?!").*$/ mg; – buckley

+0

if (/ ([^ \ t] *) [\ t] +^(?! "). * $ ([^ \ T] + [\] * [\ (] [\ d] + [\)]) /) как это? Это не работает – user1224478

+0

@ user1224478 Нет, это просто простое выражение регулярного выражения^(?!). * $, Которое будет соответствовать только строкам, не содержащим двойную кавычку « – buckley

3

Я бы попробовать это (или я упростить слишком много ?):

[email protected]:~$ cat /tmp/x.txt 
"John" (2002) 
Amy (1991) 
[email protected]:~$ perl -ne 'print unless /"/' < /tmp/x.txt 
Amy (1991) 
+1

Вы можете упростить (или гольф), чтобы 'perl -ne '/"/|| print' x.txt' – DavidO

+1

Или unix-golf это для 'grep -v '' 'x.txt' :) –

+0

Еще одно символ 'grep -v \" x.txt' –

0

Попробуйте это:

if (/^\s*([^"\s]+)\s*\((\d+)\)\s*$/) { 
} 
0

Если вы уже знаете, что

if (/regex/) { ... } 

делает противоположное тому, что вы хотите сделать, не пытаюсь выяснить, что «противоположность» /regex/ есть. Это гораздо понятнее использовать противоположное if:

unless (/regex/) { ... } 
if (!/regex/) { ... } 
0

Я думаю, вы могли бы использовать !/"/ как эквивалент /^[^"]*$/

Смежные вопросы