[英]regex match a word after a certain character
我想在字符m
或b
之后匹配一個單詞
因此,例如,當單詞是men
時,我想返回en
(僅跟隨m
的單詞),如果單詞是beetles
則返回eetles
最初我嘗試過(m|b)\w+
但它與整個men
不en
在這種情況下如何編寫正則表達式? 謝謝!
您只能使用肯定的后視來獲得匹配,斷言左側是 m 或 b 使用字符 class [mb]
前面是單詞邊界\b
(?<=\b[mb])\w+
(?<=
Positive lookbehind, assert 左邊的內容是\b[mb]
字邊界,匹配m
或b
)
近距離觀察\w+
匹配 1 + 單詞字符如果單詞字符后面沒有任何內容,您可以使用(?!\S)
在右側斷言空白邊界
(?<=\b[mb])\w+(?!\S)
示例代碼
import re
test_str = ("beetles men")
regex = r"(?<=\b[mb])\w+"
print(re.findall(regex, test_str))
Output
['eetles', 'en']
您可以使用
\b[mb](\w+)
請參閱正則表達式演示。
注意:當您的已知前綴包括多字符序列時,例如,您想查找以m
或be
開頭的單詞,您將不得不使用非捕獲組而不是字符 class: \b(?:m|be)(\w+)
。 因此,當前的解決方案可以寫為\b(?:m|b)(\w+)
(但是,這里的字符 class 看起來更自然,除非您必須動態構建正則表達式)。
細節
\b
- 單詞邊界[mb]
- m
或b
(\w+)
- 捕獲組 1:任何一個或多個單詞字符、字母、數字或下划線。 要僅匹配字母,請改用([^\W\d_]+)
。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 開頭的單詞”。
(?<=[mb])
:積極的向后看\w+
:匹配任何單詞字符(等於 [a-zA-Z0-9]+)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.