簡體   English   中英

正則表達式需要至少一場比賽

[英]regex require at least one match

我正在寫一個正則表達式,該表達式應該在文檔中查找特定類的實例。 此類由在比賽中三個特定位置中的一個或多個中的兩個符號(我們稱為X和Y) 之一來標注。

目前我的表情是這樣的:

'X?(?:expression_one)[XY]?(?:expression_two)Y?(?:optional_end_expression)?'

問題在於,這將匹配一個滿足'expression_oneexpression_two'沒有任何符號的字符串。 我想知道是否有一種方法可以限制上述表達式,以便XY必須存在於至少一個位置中才能匹配。

這是解決這種問題的最簡單的正則表達式示例

r = re.compile(r'\$?\d*[\$%]?\d*%?')

這將匹配

  • $ 44
  • 44%
  • 34 $ 53%
  • 還有任何數量

我希望它要求那些符號至少存在於指定的位置之一 ,以便它不僅與文本中的任何數字匹配

由於您的表達式非常簡單,因此我將使用|顯式列出每種形式| 運算符,如下所示:

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.

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