正则表达式匹配第三,第四,第五......单词

时间:2015-11-02 00:13:48

标签: python regex

我有一些字符串,例如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'

2 个答案:

答案 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'

请注意,在此表达式中,(?: ...)非捕获括号