Regex удалить строку, содержащую символ

0

У меня есть список значений, возвращаемых мне, и все они заканчиваются на | как ниже:

testdata1-old |
testdata |
test2-old|

Я хочу удалить все строки, содержащие -old. Какое регулярное выражение я могу использовать?

user3738022
источник
1
Какую ОС, среду или язык программирования вы используете?
Steven
Windows, среда не уверен, что вы имеете в виду, но на данный момент его в интеграции и языке Java Java будет хорошо ... вроде как этот у меня есть "^. +? \ SPM _. + $", но он, очевидно, служит другой цель
user3738022
1
Какой вклад? Какой выход? Это файл? Это используется в контексте программирования с Java? Пакетный скриптинг?
Samir
input представляет собой запрос xpath, который выдает этот вывод, он используется в контексте программирования с java yes. Таким образом, печать, запись в файл не будет подходящим. Единственное, что было бы приемлемо - это регулярное выражение. Я получил это «^. + \ - old. + $», Но он делает противоположное, вместо удаления, сохраняя все с -old
user3738022

Ответы:

3

Я думаю, что вы неправильно понимаете регулярные выражения. По сути, они отвечают на вопрос "выглядит ли этот текст как этот конкретный шаблон?" Есть много инструментов, которые используют регулярные выражения для управления текстом, например, sed или же grepи я думаю, что вы путаете их.

Что вам нужно сделать, это сформировать регулярное выражение, соответствующее тексту, который вы хотите отфильтровать. Например, искомое выражение ^.*-old\|$и отфильтруйте строки, используя что-то вроде этого.

foreach line in input_file
    if regex.matches(line, "^.*-old\|$") then
        continue
    else
        print line
Akinos
источник
Хорошо, я новичок во всем этом, поэтому я перепутал свои термины, я попробовал выражение само по себе, и он ничего не делает, не удаляя строки с -old. я
user3738022
Я пробовал это регулярное выражение "^. + \ - old. + $", Но вместо удаления этих строк он сохраняет их
user3738022
Во-вторых, выражения regex используются для «ответа на вопрос», или, вернее, для описания шаблона. Они, очевидно, не могут быть теми, кто задает вопрос! ;-) Во всяком случае, переводчик задает вопрос «что вы хотите, чтобы я искал?».
Samir
Итак, что я могу использовать, чтобы отфильтровать это и получить желаемый результат удаления всех строк, содержащих -old
user3738022
@ user3738022 Псевдокод, предоставленный Nat, распечатает все строки, которые не соответствовать регулярному выражению Если вы хотите иметь возможность вернуть его другой функции в Java, вы можете создать StringBuilder и добавить line к этому в else пункт вместо печати.
8bittree
0

Что вам нужно

grep -v -E '^. * - old \ | $' input_file & gt; выходной файл

или что должно работать так же:

egrep -v '^. * - old \ | $' input_file & gt; выходной файл

Теперь самое сложное - найти версию Windows grep или же egrep который запускается из cmd.exe или Powershell.

Hannu
источник
Спасибо, но, как вы сказали, сложная часть - найти версию для grrp или egrep для Windows. Я не хочу использовать cmd и powershell. Могу ли я не просто изменить эту команду, чтобы она удаляла строки со старыми вместо того, чтобы выбирать только те: ^. +? \ - old. + $
user3738022
regular-expressions.info/lookaround.html - negative lokahead может работать, в зависимости от вашего движка регулярных выражений.
Hannu