带有方括号 [] 的 Python 正则表达式行为

标签 python

这是文本文件 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/

相关文章:

python - Python 多处理模块中 apply() 和 apply_async() 的区别

Python - 在列上具有多个索引的数据透视表

python - 使用 Python 匹配大型文本文件的一部分

python - 使用涉及开始和结束时间的数据进行二元预测

python - 将字典列表写入 Pandas Dataframe 中的同一行

python - clang.cindex.Libclang错误 "Undefined symbol clang_CXXRecord_isAbstract"

python - 找到多米诺骨牌顺序的有效方法

python - 如何在 Python 中调试 iOS Selenium 测试

python - 如何使用返回绘图的函数创建 3D 绘图?

python - 自动摘要 “toctree contains reference to nonexisting document” 警告