Регулярное выражение, чтобы соответствовать, когда слово не существует - PullRequest
0 голосов
/ 13 июня 2018

Я отлаживаю некоторый код Java, который использует RegexFileFilter из Apache Commons IO со следующим регулярным выражением:

(?:custpartnum).*(?:8798518684708).*

Это соответствует следующим строкам:

custpartnum-en-8798518684708.csv_20180612152233580
custpartnum-en-8798518684708.csv_filtered_20180612152300971

I 'я пытаюсь сказать, что он не совпадает со строкой, содержащей filtered?

Я пробовал это, но он все еще соответствовал обеим строкам:

(?:custpartnum).*(?:8798518684708).*(?!filtered)

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете переместить отрицательный прогноз до части .* и обновить его, чтобы он соответствовал любому символу ноль или более раз, после которого следует отфильтрованный.

Таким образом, вы сначала утверждаете, используя отрицательный взгляд, который после вассоответствуют 8798518684708, справа не должно быть filtered.

(?:custpartnum).*(?:8798518684708)(?!.*filtered).*

Вы можете использовать обновленную версию без групп без захвата:

custpartnum.*8798518684708(?!.*filtered).*

0 голосов
/ 13 июня 2018

Вы можете сопоставлять файлы только с цифрами после .csv:

custparnum[^.]*8798518684708.csv_\d*

Я воспользовался возможностью удалить ваши (?:non-capturing groups), которые, вероятно, не имеют смысла (они были бы полезны, если бы вам пришлосьизменить их с помощью квантификатора).

...