[英]regex require at least one match
我正在寫一個正則表達式,該表達式應該在文檔中查找特定類的實例。 此類由在比賽中三個特定位置中的一個或多個中的兩個符號(我們稱為X和Y) 之一來標注。
目前我的表情是這樣的:
'X?(?:expression_one)[XY]?(?:expression_two)Y?(?:optional_end_expression)?'
問題在於,這將匹配一個滿足'expression_oneexpression_two'
沒有任何符號的字符串。 我想知道是否有一種方法可以限制上述表達式,以便X
或Y
必須存在於至少一個位置中才能匹配。
這是解決這種問題的最簡單的正則表達式示例
r = re.compile(r'\$?\d*[\$%]?\d*%?')
這將匹配
我希望它要求那些符號至少存在於指定的位置之一 ,以便它不僅與文本中的任何數字匹配
由於您的表達式非常簡單,因此我將使用|
顯式列出每種形式|
運算符,如下所示:
import re
# Original, from question
# r = re.compile(r'\$?\d*[\$%]?\d*%?')
# New RE. Strategy is to explicitly match each possible form
r = re.compile(r'''
(?x) # Verbose RE
(\$\d*[\$%]?\d*%?) # Matches $FOO
| (\$?\d*[\$%]\d*%?) # Matches FOO$BAR, FOO%BAR
| (\$?\d*[\$%]?\d*%) # Matches BAR%
''')
# Tests:
assert r.match("$44")
assert r.match("44%")
assert r.match("34$53%")
assert not r.match("1987")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.