[英]getting only total match in a regex method checking multiple patterns in python
[英]Regex match only if multiple patterns found (python)
我正試圖從句子中提取數據,例如:
"monthly payment of 525 and 5000 drive off"
使用python正則表達式搜索功能:re.search()
我的正則表達式查詢字符串如下所示:
match1 = "(?P<down_payment>\d+)\s*(|\$|dollars*|money)*\s*" + \
"(down|drive(\s|-)*off|due\s*at\s*signing|drive\s*-*\s*off)*"
我的問題是它匹配錯誤的數值作為首付,它得到525和5000。
我如何改進我的正則表達式字符串,以便它只匹配一個元素,如果另一個元素也成功匹配?
在這種情況下,例如, 5000和驅動器都匹配,所以我們可以提取5000作為down_payment,但525與任何預付款值不匹配,所以它甚至不應該考慮525。
關鍵是你要匹配一系列模式 。 為了確保考慮尾隨模式,它們不能全部是可選的。 看看, \\s*
, (|\\$|dollars*|money)*
, \\s*
, (down|drive(\\s|-)*off|due\\s*at\\s*signing|drive\\s*-*\\s*off)*
可以匹配空字符串。
我建議刪除最終的*
量詞,以匹配模式的一個匹配項:
(?P<down_payment>\d+)\s*(?:\$|dollars*|money)?\s*(down|drive[\s-]*off|due\s*at\s*signing|drive\s*-*\s*off)
請參閱正則表達式演示
另請注意,我將(\\s|-)
組縮小為字符類[\\s-]
因為您只替換單個字符模式,並且還將(|\\$|dollars*|money)*
轉換為非捕獲可選項小組(?:\\$|dollars*|money)?
只匹配1或0次出現的$
, dollar(s)
或money
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.