问题描述
下面的代码应该可以自我解释。 正则表达式很简单。 为什么不匹配?
>>> import re
>>> digit_regex = re.compile('\d')
>>> string = 'this is a string with a 4 digit in it'
>>> result = digit_regex.match(string)
>>> print result
None
或者,这可以工作:
>>> char_regex = re.compile('\w')
>>> result = char_regex.match(string)
>>> print result
<_sre.SRE_Match object at 0x10044e780>
为什么第二个正则表达式起作用,而不是第一个起作用?
1楼
是re.match()
所说的, If zero or more characters at the beginning of string match the regular expression pattern ...
在您的情况下,字符串开头没有任何数字\\d
。
但是对于\\w
它在字符串的开头没有t
。
如果要使用相同的机制检查字符串中的数字,请在正则表达式中添加.*
:
digit_regex = re.compile('.*\d')
2楼
第二个找到匹配项,因为string
以单词字符开头。
如果要在字符串中查找匹配项,请使用search
或findall
方法(我也认为这是在注释中建议的)。
或更改您的正则表达式(例如.*(\\d).*
),并在结果上使用.groups()方法。