Есть ли выражение Regex для соответствия всем вхождениям буквы, кроме определенной строки? - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь найти выражение Regex, соответствующее любому вхождению буквы в строке строчных [az] слов, за исключением случаев, когда эта буква встречается в определенном слове. Слова окружены пробелами, исключая первое и последнее слово, так как они находятся в начале и в конце строки.

В частности, я хочу сопоставить любой 'f' в строке, кроме тех, которые встречаются в слове 'def'. В прошлом у меня был очень небольшой опыт работы с Regex.

Например, с учетом этой строки:

'def half def запрещено fluff def def tough off defined def'

выражение должно выбирать только жирным шрифтом 'f как таковым:

' def hal f def f orbidden f lu ff def def tough o ff de f inite def '

Ответы [ 2 ]

4 голосов
/ 17 июня 2020

Вы можете попробовать:

f(?<!\bdef\b)

Объяснение приведенного выше регулярного выражения:

f - Соответствие f буквально.

(?<!\bdef\b) - представляет отрицательный ретроспективный анализ , не совпадающий ни с одним вхождением слова def. Если вы хотите, чтобы def не учитывал регистр, используйте флаг \i.

\b - представляет границу слова для совпадения точного слова (в данном случае def) или символов внутри.

Pictorial Representation

You can find the demo of the above regex in здесь.

1 голос
/ 18 июня 2020

Используйте шаблон PCRE, например

(?<!\S)def(?!\S)(*SKIP)(*FAIL)|f

См. proof . Он соответствует def внутри границ пробелов, пропускает совпадение и соответствует f во всех остальных местах.

enter image description here

Если хотите чтобы сделать регистр нечувствительным, добавьте (?i):

(?i)(?<!\S)def(?!\S)(*SKIP)(*FAIL)|f
...