簡體   English   中英

正則表達式匹配某個字符后的單詞

[英]regex match a word after a certain character

我想在字符mb之后匹配一個單詞

因此,例如,當單詞是men時,我想返回en (僅跟隨m的單詞),如果單詞是beetles則返回eetles

最初我嘗試過(m|b)\w+但它與整個menen

在這種情況下如何編寫正則表達式? 謝謝!

您只能使用肯定的后視來獲得匹配,斷言左側是 m 或 b 使用字符 class [mb]前面是單詞邊界\b

(?<=\b[mb])\w+
  • (?<= Positive lookbehind, assert 左邊的內容是
  • \b[mb]字邊界,匹配mb
  • )近距離觀察
  • \w+匹配 1 + 單詞字符

正則表達式演示

如果單詞字符后面沒有任何內容,您可以使用(?!\S)在右側斷言空白邊界

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

正則表達式演示| Python 演示

示例代碼

import re

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

Output

['eetles', 'en']

您可以使用

\b[mb](\w+)

請參閱正則表達式演示

注意:當您的已知前綴包括多字符序列時,例如,您想查找以mbe開頭的單詞,您將不得不使用非捕獲組而不是字符 class: \b(?:m|be)(\w+) 因此,當前的解決方案可以寫為\b(?:m|b)(\w+) (但是,這里的字符 class 看起來更自然,除非您必須動態構建正則表達式)。

細節

  • \b - 單詞邊界
  • [mb] - mb
  • (\w+) - 捕獲組 1:任何一個或多個單詞字符、字母、數字或下划線。 要僅匹配字母,請改用([^\W\d_]+)

Python 演示

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']
(?<=[mb])\w+/

您可以使用上面的正則表達式。 正則表達式的意思是“任何以 m 或 b 開頭的單詞”。

  1. (?<=[mb]) :積極的向后看
  2. \w+ :匹配任何單詞字符(等於 [a-zA-Z0-9]+)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM