我有一些字符串,例如255
,"aaa bbb ccc"
“,"aaa bbb ccc ddd
”....
我需要一个正则表达式,以便我无法摆脱"aaa bbb ccc ddd eee
并获得其他所有内容。
我正在尝试aaa bbb
,但它无效。
'\w+\s\w+\s(\w+|\s)+'
我希望它返回In [171]: r = re.search('\w+\s\w+\s(\w+|\s)+', 'aaa bbb ccc ddd')
In [172]: r.group(0)
Out[172]: 'aaa bbb ccc ddd'
In [173]: r.group(1)
Out[173]: 'ddd'
答案 0 :(得分:1)
您的方法不起作用,因为重复捕获组会替换先前的捕获。如果你把它作为一个非捕获组(包括量词)并在其周围包裹一个捕获组,它应该可以工作。
re.compile(r"""
(?:\w+\s){2} # two words we don't care about
( # begin capturing
(?:\w+\s?)+ # 1+ word chars followed by an optional space, 1+ times
) # stop capturing""", re.X)
虽然我不确定你为什么要使用正则表达式。不是str.split
更好吗?
s = 'aaa bbb ccc ddd'
result = s.split()[2:]
答案 1 :(得分:0)
这里的问题是你没有告诉正则表达式该组应该包含\w+|\s
的所有重复... ...因为+
在括号之外。
相反,请尝试:
>>> r = re.search('\w+\s\w+\s((?:\w+|\s)+)', 'aaa bbb ccc ddd')
>>> r.group(1)
>>> 'ccc ddd'
请注意,在此表达式中,(?: ...)
是非捕获括号