[英]python regular expression works on numbers but not letters?
我正在為此做准備...假設我有以下字符串:“ 123abc”,並想在python 2.7中對其進行正則表達式。 如果我做:
import re
s = "123abc"
m = re.search('[0-9]*', s)
print(m.group(0))
它的行為完全符合預期,並顯示“ 123”。
但是,如果我想這樣做:
import re
s = "123abc"
m = re.search('[a-z]*', s)
print(m.group(0))
它只顯示“”->空字符串。
為什么? 如何使其與角色配合使用?
還要注意,如果我刪除星號,它可以使用字母(例如group(0)
是a
)。 是的,我也嘗試過r'[az]*'
; 那也不能解決。
*
匹配零次或多次。 想想“ 113abc”中第一個字符之前的位置,那里的位置是零倍! 如此搭配。
這是獲得所需輸出的最簡單解決方案
import re
s = "123abc"
m = re.search('[a-z]+', s)
print(m.group(0))
如果您只是替換定界符,它也適用於您原始的數字正則表達式並輸出'123'。 +匹配1個或更多,更符合您的要求。
要查看行為上的差異,讓我們看看兩個正則表達式的findall
輸出:
>>> print re.findall('[a-z]*', s)
['', '', '', 'abc', '']
>>> print re.findall('[0-9]*', s)
['123', '', '', '', '']
如您在[az]*
看到的,在匹配abc
之前我們得到3個空匹配,這是search
返回空的原因,因為它返回了第一個匹配。
您正在使用[az]*
(0或多次出現的[az]
甚至一個空字符串相匹配。 所以我們得到3場空比賽為前3個字母1
, 2
, 3
,在字符串的結尾另一個空匹配。
但是對於第二種情況,由於第一個匹配為123
,因此search
功能返回的結果相同。
當我們使用+
量詞時,行為會更改為:
>>> print re.findall('[0-9]+', s)
['123']
>>> print re.findall('[a-z]+', s)
['abc']
因為兩個空表達式現在不可能,所以返回兩個正則表達式的單個匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.