python 正则表达式 我想找到字符串中成对匹配的数据 请指教

print re.findall(r'((?<=\d)[a-zA-Z]+)\1)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
我正则表达式表示的意思是: 查找出 前面是数字的, 后面是字母的, 成对出现的单词
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)]
我那个正则表达式哪里错了 该怎么改 多谢
希望输出结果:
[(ammmmmde, ammmmmde), (abc, abc)]

第1个回答  推荐于2016-01-17
针对你所给的示例字符串,貌似无法一次性地提取出后面的那个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')]

本回答被提问者采纳
第2个回答  2012-11-16
>>> print re.findall(r'((?<=\d)([a-zA-Z]+)(.*?)\2)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
[('ammmmmde234abc aaaaa 123ammmmmde', 'ammmmmde', '234abc aaaaa 123')]
第3个回答  2012-11-16
print re.findall(r'(?<=\d{3})[a-zA-Z]+', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')
第4个回答  2012-11-16
\d+(?<a>[a-zA-Z]+)\d+(?<b>[a-zA-Z]+)

数组a是ammmmmde
数组b是abc本回答被网友采纳

python 正则表达式 我想找到字符串中成对匹配的数据 请指教
针对你所给的示例字符串,貌似无法一次性地提取出后面的那个abc的,只能提取出前面的ammmmmde:可以这样写:>>> re.findall(r'(?:\\d+)([a-zA-Z]+)', 'sssa 123ammmmmde234abc aaaaa 123ammmmmde234abc llll')['ammmmmde', 'abc', 'ammmmmde', 'abc']原因在于:正则从左往右查找,...

python 正则表达式,怎么从字符串中匹配成组的所有结果?
匹配所有结果的python程序如下(注意图中源代码的缩进)import re a="lege.teeth34eatedecdeath#e0t~"regex='(.)e(.)t(.)'result=[]for i in range(len(a)-4):b=a[i:i+5]obj=re.match(regex,b)if obj:result.append((obj.group(1),obj.group(2),obj.group(3)))print(result)

python正则表达式 如何找到指定字符后面完整的数字字符串
使用re模块的search函数,能过正则表达式查找,代码如下:import rereg=re.compile(r"(?<=指定字符)\\d+")match=reg.search("待查找文本")print match.group(0)(?<=指定字符)此部分定位指定字符,查找但不包含 \\d+此部分为一个以上数字 这样就可以查找出数字字符串 ...

python 正则表达式如何截取字符串中间的内容
示例代码启动ipython先导入re模块 这里我用到了findall全局匹配,分为两部分,前面是正则,后面是要匹配的字符串 得到一个元祖 通过变量a 就能打印出想要的字符串

python,正则表达式,匹配括号内部内容
正则:(?<=(\\(|()).*(?=()|\\)))python正则:'\\(\\?\\<\\=\\(\\\\\\(\\|\\(\\)\\)\\.\\*\\(\\?\\=\\(\\)\\|\\\\\\)\\)\\)'

python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进 ...
你好,匹配和替换是两个操作,你可以分两步来做。第一步匹配:hit=re.search(“(\\<question\\>\\)”,inputstr)第二步替换 result=re.sub(‘”’,‘\\”’,inputstr)

python 提取字符串中的数字
x 字符。x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。(a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。## (x) 一般情况下表示一个记忆组 (remembered group)。可以利用 re.search 函数返回对象的 groups() 函数获取它的值。正则表达式中的点号通常意味着 “匹配任意单字符”...

python怎样提取字符串中的数字
利用正则表达式 a=re.findall(r'\\d',str1)

python 正则表达式如何截取字符串中间的内容
在Python中,要截取字符串中间的内容,你可以利用正则表达式和re模块。首先,确保已导入re模块,然后通过re模块提供的全局匹配功能,如findall方法来实现。以下是一个示例代码片段:pythonimport re# 定义一个字符串和正则表达式模式input_string = "这是一段需要截取中间内容的字符串"pattern = r"^(.*?

Python用正则表达式匹配含有中文的字符串,匹配不到?
代码如下:coding=utf-8import res = u'首 页 'r = re.compile(u'(.*?)(?=)')ss = r.findall(s)for str in ss: print str运行结果:

相似回答