下面的正則表達式
moo = re.compile(r'^\d+$')
將搜索剛剛開始,並以數字字符結尾的字符串。示例可以是11234
,44332
,123321321
等。
但是正則表達式不匹配12321xyz12312
。這個字符串也以數字開頭和結尾,這就是我的正則表達式需要匹配一個字符串!那爲什麼我的正則表達式不匹配這個字符串呢?
下面的正則表達式
moo = re.compile(r'^\d+$')
將搜索剛剛開始,並以數字字符結尾的字符串。示例可以是11234
,44332
,123321321
等。
但是正則表達式不匹配12321xyz12312
。這個字符串也以數字開頭和結尾,這就是我的正則表達式需要匹配一個字符串!那爲什麼我的正則表達式不匹配這個字符串呢?
我想你錯誤地理解了開始和結束匹配器的工作方式。
^\d+$
不會簡單匹配以數字結尾並以數字開頭的字符串。它說:
^
)\d
)+
)$
)12321xyz12312
不匹配,因爲它匹配後12321
,它會嘗試匹配字符串的末尾。但它還沒有結束,所以字符串不匹配!
這裏是一個正則表達式,你想要做什麼:
^\d(.*\d)?$
這表達式將匹配如下:
YES 0
NO x0
NO 0x
YES 00
YES 000
YES 0x0
YES 00x00
YES 000xxx000
您能否給我一個正則表達式來匹配一個字符串,該字符串的兩端都有數字,不管它裏面有哪些字符? –
@ M.Hamel你看到我的[評論](https://stackoverflow.com/questions/45517557/why-is-d-matching-a-string-that-is-fully-numeric?noredirect=1#comment77996423_45517557 ) –
我更新了正則表達式。以前的版本不需要正確的數字。 – Soviut
"^\d+$"
表示「開始"^"
和結束"$"
之間的一個或多個十進制數字"\d+"
」。 xyz
不是十進制數字。
我想你誤會了正則表達式。它匹配「字符串開頭」(^
),緊跟着「一個或多個0-9個字符」(\d+
-\d
與[0-9]
相同或0|1|2|3|4|5|6|7|8|9
和+
表示「重複一次或多次」)緊接着是「結束字符串「($
)。
也就是說,^ ... $
的意思是「只匹配與...
相同的字符串」(而不是「匹配包含它的字符串」)。
「正則表達式'moo = re.compile(r'^ \ d + $')'會搜索一個剛剛開始並以數字字符結尾的字符串。」 - 不。如果你解釋你爲什麼這麼想,我們可以解釋你的誤解。 – user2357112
如果你想匹配一個剛剛開始和結束的數字字符串,你可以使用're.compile(r'^ \ d。* \ d $')' –
@cᴏʟᴅsᴘᴇᴇᴅ:除了不匹配像'1'這樣的單個數字字符串,所以如果你想匹配那些(你可能會這樣做),你需要特殊情況或使用lookaround斷言或只是不使用正則表達式或其他東西。 – user2357112