我已经在http://regexpal.com/上测试了以下代码,它正确地匹配了我想要的字符串。我想找出16位数字,这些数字以4块为单位,中间有一个空格,因此我编写了以下正则表达式:
\d{4}(\s\d{4}){3}
例如,匹配4个数字,然后匹配一个空格的三个重复集,后跟四个数字。在regexpal上,它正确匹配:
test1234 message1234 5678 1234 5678
但是,在Python中,我运行以下代码:
>>> import re
>>> p = re.compile('\d{4}(\s\d{4}){3}')
>>> p.findall('test1234 message1234 5678 1234 5678')
[' 5678']
>>>
我不明白为什么它匹配的是第二个实例的'5678',为什么它不匹配的数字块,因为我预计。你知道吗
您需要在字符串前面加上
r
或转义反斜杠:或者
raw string是定义regex的推荐方法,但是这里的问题主要是因为
findall
方法的实现。您需要将正则表达式中的捕获组转换为非捕获组。因为re.findall
函数首先优先选择捕获,然后是匹配。正则表达式\d{4}(\s\d{4}){3}
与16位数字匹配,但只捕获最后4位加上前面的空格。你知道吗示例:
相关问题 更多 >
编程相关推荐