繁体   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