簡體   English   中英

只有找到多個模式時才能使用正則表達式匹配(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.

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