擅长:python、mysql、java
<p>raw string是定义regex的推荐方法,但是这里的问题主要是因为<code>findall</code>方法的实现。您需要将正则表达式中的<strong>捕获组</strong>转换为<strong>非捕获组</strong>。因为<code>re.findall</code>函数首先优先选择捕获,然后是匹配。正则表达式<code>\d{4}(\s\d{4}){3}</code>与16位数字匹配,但只捕获最后4位加上前面的空格。你知道吗</p>
<pre><code>p = re.compile(r'\d{4}(?:\s\d{4}){3}')
</code></pre>
<p><strong>示例:</strong></p>
<pre><code>>>> import re
>>> p = re.compile(r'\d{4}(\s\d{4}){3}')
>>> p.findall('test1234 message1234 5678 1234 5678')
[' 5678']
>>> p = re.compile(r'\d{4}(?:\s\d{4}){3}')
>>> p.findall('test1234 message1234 5678 1234 5678')
['1234 5678 1234 5678']
</code></pre>