Регулярный вопрос! - PullRequest
       6

Регулярный вопрос!

0 голосов
/ 06 февраля 2011

Я не слишком знаком с регулярным выражением, но я знаю, что мне нужно найти-

У меня длинный список данных, разделенных символами новой строки, и мне нужно удалить все строки данных, которые содержат строку "(V)". Строки имеют переменную длину, так что я думаю, что-то делать с выбором всего между двумя символами новой строки, если есть (V) внутри?

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Если данные действительно довольно большие, то запуск одного регулярного выражения для всей строки будет плохой идеей.Вместо этого вам может подойти простое решение, такое как скрипт Perl:

open my $fh, '<', 'data.txt' or die $!;
while (my $line = <$fh>) {
    if ($line =~ m/\(V\)/) {
        next;
    }
    print $line;
}
close $fh;

Этот скрипт читает файл данных по одной строке за раз и печатает строки, которые не содержат "(V)", в стандартный вывод.(Очевидно, вы могли бы заменить «печать» другой задачей обработки данных)

1 голос
/ 06 февраля 2011

Используйте команду UNIX grep, если у вас есть доступ к такой системе.

$ grep -v '(V)' data.txt

Grep соответствует всем строкам, содержащим «(V)» в data.txt, и показывает только те строки, которые несоответствие (-v).

1 голос
/ 06 февраля 2011

Попробуйте найти это регулярное выражение:

^.*\(V\).*$

Объяснение:

^   start of line
.*  any characters apart from new line
\(  open parenthesis (escaped to avoid special behaviour)
V   V
\)  close parenthesis  (escaped to avoid special behaviour)
.*  any characters apart from new line
$   end of line (not strictly need here, included only for clarity)

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

Вот онлайн-пример, демонстрирующий его работу: Rubular

...