![](/img/trans.png)
[英]Why does string replace function does not respect the word boundary \b regex?
[英]Why does my regex with word boundary fail?
我想匹配數字,可以是正數也可以是負數,可能前面要有貨幣符號。 但是我不想要像PSM-9這樣的東西。 我的代碼是:
test='AAA PCSK-9, $111 -3,33'
re.findall(r'\b-?[$€£]?-?\d+[\d,.]*\b', test)
輸出為: ['-9', '111', '3,33']
有人可以解釋為什么匹配-9嗎? 先感謝您。
編輯:我不匹配PCSK-9的任何部分,就像產品的名稱而不是數字。 所以我想要的輸出是:
['111', '3,33']
這是因為\\b
匹配K
和-
之間的K
,即單詞和非單詞字符。 如果您想避免匹配-
如果前面有一個單詞,則可以改用負向后搜索:
re.findall(r'[$€£]?(?:(?<!\w)-)?\d+[\d,.]*\b', test)
使用您的樣本輸入,將返回:
['9', '111', '3,33']
匹配-9
是因為-
是一個非單詞字符,而S
是一個單詞字符...因此,正如您在正則表達式中指出的那樣,在它們之間有一個單詞間邊界\\b
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.