Esa*_*yol 6 python regex iteration
我有一个很长的 .txt 文件。我想用正则表达式找到所有匹配的结果。
例如 :
test_str = 'ali. veli. ahmet.'
src = re.finditer(r'(\w+\.\s){1,2}', test_str, re.MULTILINE)
print(*src)
Run Code Online (Sandbox Code Playgroud)
此代码返回:
<re.Match object; span=(0, 11), match='ali. veli. '>
Run Code Online (Sandbox Code Playgroud)
我需要;
['ali. veli', 'veli. ahmet.']
Run Code Online (Sandbox Code Playgroud)
我怎么能用正则表达式做到这一点?
该(\w+\.\s){1,2}模式包含一个重复的捕获组,Pythonre不会存储它找到的所有捕获,它只将最后一个捕获到组内存缓冲区中。无论如何,您不需要重复的捕获组,因为您需要从字符串中提取多次出现的模式,并且re.finditer或re.findall将为您执行此操作。
此外,re.MULTILINE这里不需要标志,因为模式中没有^或锚点。$
您可能会得到预期的结果
import re
test_str = 'ali. veli. ahmet.'
src = re.findall(r'(?=\b(\w+\.\s+\w+))', test_str)
print(src)
# => ['ali. veli', 'veli. ahmet']
Run Code Online (Sandbox Code Playgroud)
图案的意思是
(?=- 积极展望的开始
\b - 单词边界(这里很重要,必须只在单词边界处开始捕获)(\w+\.\s+\w+)- 捕获组 1:1+ 个单词字符、、.1+ 个空格和 1+ 个单词字符)- 前瞻结束。| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |