簡體   English   中英

python正則表達式適用於數字,但不適用於字母?

[英]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個字母123 ,在字符串的結尾另一個空匹配。

但是對於第二種情況,由於第一個匹配為123 ,因此search功能返回的結果相同。

當我們使用+量詞時,行為會更改為:

>>> print re.findall('[0-9]+', s)
['123']
>>> print re.findall('[a-z]+', s)
['abc']

因為兩個空表達式現在不可能,所以返回兩個正則表達式的單個匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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