C# Regex для соответствия строке, которая не содержит определенную строку?

import collections
import itertools
import string


def main():
    words = ["tree", "bone", "indigo", "developer"]
    no_repeated_letters = (set(word) for word in words)
    letter_stream = itertools.chain.from_iterable(no_repeated_letters)
    counter = collections.Counter(letter_stream)
    # set zeros for unseen letters, to match poster's answer.
    for letter in string.ascii_lowercase:
        if letter not in counter:
            counter[letter] = 0
    # print result.
    for key in sorted(counter):
        print(key, counter[key])


if __name__ == '__main__':
    main()
26
задан meagar 15 March 2016 в 12:52
поделиться

2 ответа

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

^(?!.*DontMatchThis).*$
51
ответ дан 28 November 2019 в 06:17
поделиться

Регулярное выражение для соответствия строке, которая не содержит определенного шаблона, является

(?s)^(?!.*DontMatchThis).*$

Если вы используете шаблон без (?s) (который является встроенной версией флага RegexOptions.Singleline, который делает . соответствует символу новой строки LF, а также всем другим символам), поиск DontMatchThis будет выполняться только в первой строке, и только строка без символов LF будет сопоставлена ​​с .*.

Детали шаблона :

  • (?s) - модификатор DOTALL / Singleline, позволяющий . сопоставить любому символу
  • ^ - начало строки якорь
  • (?!.*DontMatchThis) - отрицательный прогноз , проверяющий наличие 0 или более символов (сопоставляется с жадным субпаттерном .* - ПРИМЕЧАНИЕ ] ленивая .*? версия (сопоставление как можно меньшего числа символов до следующего подшаблона) может выполнить работу быстрее, если DontMatchThis ожидается ближе к началу строки) с последующим DontMatchThis
  • .* - любой ноль или более символов, как можно больше, до
  • $ - конец строки (см. Якорные символы: Доллар ($) ).
28
ответ дан 28 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: