马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 新学 于 2020-10-13 15:24 编辑
一个关于()\序号的子组问题# 我想匹配的是 'python1 python2.7 python3.8.9 ’,希望得到的结果是 [('python3.8.9 ','python3.8.9')]
>>> re.findall('((python[\d.]*)[ ]*)\2', 'python1 python2.7 python3.8.9 c++9.80')
[] # 但是这里却返回一个空列表,我到底哪里理解错了,于是做了如下尝试
>>> re.search('((python[\d.]*)[ ]*)\2', 'python1 python2.7 python3.8.9 c++9.80') # 匹配不到
>>> re.search('((python[\d.]*)[ ]*){1,}', 'python1 python2.7 python3.8.9 c++9.80')
<re.Match object; span=(0, 30), match='python1 python2.7 python3.8.9 '> # 能匹配到具体字符串
>>> re.findall('((python[\d.]*)[ ]*)((python[\d.]*)[ ]*)((python[\d.]*)[ ]*)', 'python1 python2.7 python3.8.9 c++9.80')
[('python1 ', 'python1', 'python2.7 ', 'python2.7', 'python3.8.9 ', 'python3.8.9')] # 将匹配到的字符串转化为一个包含各层子组的元组
>>> re.findall('((python[\d.]*)[ ]*)+', 'python1 python2.7 python3.8.9 c++9.80')
[('python3.8.9 ', 'python3.8.9')] # 将匹配到的字符串转化为一个只包含最后一个嵌套子组的元组
>>> re.findall('((python[\d.]*)[ ]*){1,}', 'python1 python2.7 python3.8.9 c++9.80')
[('python3.8.9 ', 'python3.8.9')]
>>> re.findall('((python[\d.]*)[ ]*){3}', 'python1 python2.7 python3.8.9 c++9.80')
[('python3.8.9 ', 'python3.8.9')]
我认为()\2应该与(){3}一样才对呀,怎么会这样? |