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)]
展开
 我来答
againinput4
推荐于2016-01-17 · TA获得超过2407个赞
知道大有可为答主
回答量:1446
采纳率:70%
帮助的人:644万
展开全部
针对你所给的示例字符串,貌似无法一次性地提取出后面的那个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)]
追问
我能利用\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')]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
justistbc
2012-11-16 · TA获得超过104个赞
知道答主
回答量:62
采纳率:0%
帮助的人:36.4万
展开全部
print re.findall(r'(?<=\d{3})[a-zA-Z]+', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
srleo
2012-11-16 · TA获得超过506个赞
知道小有建树答主
回答量:1002
采纳率:0%
帮助的人:753万
展开全部
\d+(?<a>[a-zA-Z]+)\d+(?<b>[a-zA-Z]+)

数组a是ammmmmde
数组b是abc
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式