python 正则表达式 我想找到字符串中成对匹配的数据 请指教
printre.findall(r'((?<=\d)[a-zA-Z]+)\1)','sssa123ammmmmde234abcaaaaa123ammmmmde234abc...
print re.findall(r'((?<=\d)[a-zA-Z]+)\1)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
我正则表达式表示的意思是: 查找出 前面是数字的, 后面是字母的, 成对出现的单词
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)]
我那个正则表达式哪里错了 该怎么改 多谢
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)] 展开
我正则表达式表示的意思是: 查找出 前面是数字的, 后面是字母的, 成对出现的单词
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)]
我那个正则表达式哪里错了 该怎么改 多谢
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)] 展开
4个回答
展开全部
针对你所给的示例字符串,貌似无法一次性地提取出后面的那个abc的,只能提取出前面的ammmmmde:
可以这样写:
>>> re.findall(r'(?:\d+)([a-zA-Z]+)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
['ammmmmde', 'abc', 'ammmmmde', 'abc']
原因在于:正则从左往右查找,没有在找后面的abc时,也去找到之前的abc。
因为之前的abc,被在查找ammmmmde时,藏在中间了:
123ammmmmde234abc aaaaa 123ammmmmde
搜索过了,后面没法再搜索。
一个折中的办法是,用:
>>> re.findall(r'(?:\d+)([a-zA-Z]+)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
['ammmmmde', 'abc', 'ammmmmde', 'abc']
找到上述的
['ammmmmde', 'abc', 'ammmmmde', 'abc']
然后你自己再另外提取,组合出来你要的:
[(ammmmmde, ammmmmde), (abc, abc)]
可以这样写:
>>> re.findall(r'(?:\d+)([a-zA-Z]+)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
['ammmmmde', 'abc', 'ammmmmde', 'abc']
原因在于:正则从左往右查找,没有在找后面的abc时,也去找到之前的abc。
因为之前的abc,被在查找ammmmmde时,藏在中间了:
123ammmmmde234abc aaaaa 123ammmmmde
搜索过了,后面没法再搜索。
一个折中的办法是,用:
>>> re.findall(r'(?:\d+)([a-zA-Z]+)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
['ammmmmde', 'abc', 'ammmmmde', 'abc']
找到上述的
['ammmmmde', 'abc', 'ammmmmde', 'abc']
然后你自己再另外提取,组合出来你要的:
[(ammmmmde, ammmmmde), (abc, abc)]
追问
我能利用\1来进行回溯么?? 这样虽然搜出来了, 但是并不是因为找到匹配对而打印出来的 有点不符合题意 呵呵
追答
我已经试过了\1去后向引用啊,只是最多还是只能搜出来ammmmmde:
>>> re.findall(r'(?:\d+)([a-zA-Z]+).+?(\1)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
[('ammmmmde', 'ammmmmde')]
无法搜出来abc的,因为你的前半个abc,在搜索后半个ammmmmde的时候,就搜过了,所以无法嵌套式的提取出来你要的前半个abc的。
除非你的字符串是这样的,两部分是非重叠的,才可以搜出来:
>>> re.findall(r'(?:\d+)([a-zA-Z]+).+?(\1)', 'sssa 123ammmmmde234 aaaaa 123ammmmmde456abc 234abc llll')
[('ammmmmde', 'ammmmmde'), ('abc', 'abc')]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-11-16
展开全部
>>> print re.findall(r'((?<=\d)([a-zA-Z]+)(.*?)\2)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
[('ammmmmde234abc aaaaa 123ammmmmde', 'ammmmmde', '234abc aaaaa 123')]
[('ammmmmde234abc aaaaa 123ammmmmde', 'ammmmmde', '234abc aaaaa 123')]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
print re.findall(r'(?<=\d{3})[a-zA-Z]+', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
\d+(?<a>[a-zA-Z]+)\d+(?<b>[a-zA-Z]+)
数组a是ammmmmde
数组b是abc
数组a是ammmmmde
数组b是abc
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询