python正则表达式可以处理数字,但不能处理字母?
我在为这件事发愁。。。假设我有以下字符串:“123abc”,并希望在Python2.7中对其进行正则化。如果我这样做:python正则表达式可以处理数字,但不能处理字母?,python,regex,letters,Python,Regex,Letters,我在为这件事发愁。。。假设我有以下字符串:“123abc”,并希望在Python2.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)) 它只打印“->空字符串 为什么??我如何让
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)
,例如,isa
)。是的,我也试过r'[a-z]*'
;这也不能解决问题 *
匹配零次或多次。想想“113abc”中第一个字符前面的位置,它是零次!如此匹配。*
匹配零次或多次。想想“113abc”中第一个字符前面的位置,它是零次!如此匹配。这是获得所需输出的最简单修复方法
import re
s = "123abc"
m = re.search('[a-z]+', s)
print(m.group(0))
它也适用于原始的数字正则表达式,如果只替换分隔符,则输出“123”。+匹配1个或多个更符合您需要的内容 这是获得所需输出的最简单的修复方法
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', '', '', '', '']
正如您在[a-z]*
中所看到的,我们在匹配abc
之前得到了3个空匹配项,这就是搜索返回空匹配项的原因,因为它返回第一个匹配项
您正在使用[a-z]*
(0次或多次出现[a-z]
)它甚至匹配空字符串。因此,我们得到了前3个字母1
、2
、3
的3个空匹配项,以及字符串末尾的另一个空匹配项
然而,对于第二种情况,因为第一个匹配是123
,所以我们得到了search
函数返回的相同结果
当我们使用+
量词时,行为会发生以下变化:
>>> print re.findall('[0-9]+', s)
['123']
>>> print re.findall('[a-z]+', s)
['abc']
因此,对于这两个正则表达式,我们将返回单个匹配项,因为现在不可能有空匹配项。要查看行为上的差异,让我们看看这两个正则表达式的findall
输出:
>>> print re.findall('[a-z]*', s)
['', '', '', 'abc', '']
>>> print re.findall('[0-9]*', s)
['123', '', '', '', '']
正如您在[a-z]*
中所看到的,我们在匹配abc
之前得到了3个空匹配项,这就是搜索返回空匹配项的原因,因为它返回第一个匹配项
您正在使用[a-z]*
(0次或多次出现[a-z]
)它甚至匹配空字符串。因此,我们得到了前3个字母1
、2
、3
的3个空匹配项,以及字符串末尾的另一个空匹配项
然而,对于第二种情况,因为第一个匹配是123
,所以我们得到了search
函数返回的相同结果
当我们使用+
量词时,行为会发生以下变化:
>>> print re.findall('[0-9]+', s)
['123']
>>> print re.findall('[a-z]+', s)
['abc']
因此,返回两个正则表达式的单个匹配,因为现在不可能有空匹配。*
为零或更多。或者更好的解释为多或零。*
为零或更多。或者更好的解释为多或零。啊,我明白了。所以,如果不是开头,我必须使用+?是的,你需要考虑空字符串,它应该匹配吗?如果你真的只想在至少有1个数字或alpha时匹配,你需要使用“+”。啊,我明白了。所以,如果不是开头,我必须使用+?是的,你需要考虑空字符串,它应该匹配吗?如果您确实只想在至少有1个数字或alpha时进行匹配,则需要使用“+”。