这是文本文件 abc.txt
abc.txt
aa:s0:education.gov.in
bb:s1:defence.gov.in
cc:s2:finance.gov.in
我正在尝试通过使用以下正则表达式在每个“:”处标记化(如果这是不正确的术语,请纠正我:))来解析此文件。
解析器.py
import re,sys,os,subprocess
path = "C:\abc.txt"
site_list = open(path,'r')
for line in site_list:
site_line = re.search(r'(\w)*:(\w)*:([\w\W]*\.[\W\w]*\.[\W\w]*)',line)
print('Regex found that site_line.group(2) = '+str(site_line.group(2))
为什么输出是
Regex found that site_line.group(2) = 0
Regex found that site_line.group(2) = 1
Regex found that site_line.group(2) = 2
有人可以帮我理解为什么它匹配第二组的最后一个字符吗?我认为它匹配来自 s0 的 0,来自 s1 的 1 和来自 s2 的 2
但是为什么?
最佳答案
让我们展示一个简化的例子:
>>> re.search(r'(.)*', 'asdf').group(1)
'f'
>>> re.search(r'(.*)', 'asdf').group(1)
'asdf'
如果在捕获组周围有一个重复运算符,则该组会存储最后一次重复。将组放在重复运算符周围即可完成您想要的操作。
如果您希望看到第三组的数据,那就是 group(3)
。 group(0)
为整场匹配,group(1)
、group(2)
等通过实际括号内的捕获组进行计数.
也就是说,正如评论所暗示的那样,正则表达式对此有点矫枉过正。
>>> 'aa:s0:education.gov.in'.split(':')
['aa', 's0', 'education.gov.in']
关于带有方括号 [] 的 Python 正则表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679911/