регулярное выражение соответствует слову после определенного символа - PullRequest
1 голос
/ 03 августа 2020

Я хотел бы сопоставить слово, если оно стоит после символа m или b

Так, например, когда слово men, я хотел бы вернуть en ( только слово, следующее за m), если слово beetles, то верните eetles

Первоначально я пробовал (m|b)\w+, но он соответствует всему men, а не en

Как мне написать выражение регулярного выражения в этом случае? Спасибо!

Ответы [ 3 ]

3 голосов
/ 03 августа 2020

Вы можете получить совпадение, только используя положительный просмотр назад, утверждая, что слева является либо m, либо b с использованием класса символов [mb], которому предшествует граница слова \b

(?<=\b[mb])\w+
  • (?<= Положительный просмотр назад, утверждение, что то, что находится прямо слева, -
  • \b[mb] Граница слова, соответствует либо m, либо b
  • ) Закрыть просмотр назад
  • \w+ Соответствие 1 + символы слова

Демонстрация регулярных выражений

Если после символов слова не может быть ничего, вы можете указать пробел граница справа с использованием (?!\S)

(?<=\b[mb])\w+(?!\S)

Regex demo | Python демо

Пример кода

import re

test_str = ("beetles men")
regex = r"(?<=\b[mb])\w+"
print(re.findall(regex, test_str))

Вывод

['eetles', 'en']
1 голос
/ 03 августа 2020

Вы можете использовать

\b[mb](\w+)

См. демонстрацию регулярных выражений .

ПРИМЕЧАНИЕ : когда ваши известные префиксы включают многосимвольные последовательности , скажем, вы хотите найти слова, начинающиеся с m или be, вам придется использовать не захватывающую группу, а не класс символов: \b(?:m|be)(\w+). Таким образом, текущее решение может быть записано как \b(?:m|b)(\w+) (однако класс символов здесь выглядит более естественным, если вам не нужно динамически строить регулярное выражение).

Подробности

  • \b - граница слова
  • [mb] - m или b
  • (\w+) - Группа захвата 1: любой один или несколько символов слова, буквы , цифры или символы подчеркивания. Чтобы сопоставить только буквы, используйте вместо этого ([^\W\d_]+).

Python demo :

import re
rx = re.compile(r'\b[mb](\w+)')
text = "The words are men and beetles."
# First occurrence:
m = rx.search(text)
if m:
    print(m.group(1))     # => en
# All occurrences
print( rx.findall(text) ) # => ['en', 'eetles']
0 голосов
/ 03 августа 2020
(?<=[mb])\w+/

Вы можете использовать это регулярное выражение выше. Регулярное выражение означает «Любое слово начинается с m или b».

  1. (?<=[mb]): положительный просмотр назад
  2. \w+: соответствует любому символу слова (равно к [a-zA-Z0-9] +)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...