正则表达式,如何匹配所有内容到第n次出现

时间:2017-03-17 21:26:34

标签: python regex

我正试图从网页上直到第二次出现单词matchdate

(.*?matchdate){2}正是我正在尝试的但是那并没有做到这一点。这个页面有14个以上的“matchdate”匹配,我只想把所有东西都拿到第二个,然后别的。

https://regex101.com/r/Cjyo0f/1< ---我保存的正则表达式。

我在这里缺少什么?

感谢。

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点:

如果可以,请删除g标记

如果没有全局标志,正则表达式只会抓住它遇到的第一个实例。

https://regex101.com/r/Cjyo0f/2

^添加到正则表达式的前面

插入符将强制正则表达式从字符串的开头匹配,排除所有其他可能性。

https://regex101.com/r/Cjyo0f/3

如果Python可用,请使用.split().join()

如果常规python可用,我建议:

string = "I like to matchdate, I want to each matchdate for breakfest"
print "matchdate".join(string.split("matchdate")[:2])

答案 1 :(得分:1)

你几乎拥有它! (.*?matchdate){2}实际上是正确的。它只需要一个re.DOTALL标志,这样点就可以匹配换行符和其他字符。

这是一个有效的测试:

>>> import re

>>> s = '''First line
Second line
Third with matchdate and more
Fourth line
Fifth with matchdate and other
stuff you're
not interested in
like another matchdate
or a matchdate redux.
'''

>>> print(re.search('(.*?matchdate){2}', s, re.DOTALL).group())
First line
Second line
Third with matchdate and more
Fourth line
Fifth with matchdate