正则表达式匹配第三次出现之前的字符串:冒号

时间:2017-09-25 17:02:06

标签: python regex

我想在第三次出现之前得到所有字符串:

Q: asd:rad:asd:ad asd:fztf:123
A: asd:rad:asd

我使用的是:

[^:]*:[^:]*:[^:]*

给了我答案: ad asd:fztf:123

任何指导都将不胜感激。

3 个答案:

答案 0 :(得分:1)

你的正则表达式几乎是完美的。您只需使用锚^

来帮助匹配行的开头
^[^:]*:[^:]*:[^:]*
^---- Here

<强> Working demo

更新:刚刚注意到Gurman在他的评论中暗示了这一点,因此他的信用

答案 1 :(得分:0)

我会用它,虽然我不知道它是否是最好的:^.*?:.*?:.*?(?=:)

^表示只搜索字符串的开头。

.*?:表示随后的内容:。我们想要两次。请注意?以使表达式不贪婪。

.*?与之前的行基本相同,但未捕获:

(?=:)是一个积极的展望。这意味着在捕获的正则表达式之后会有一个:,但它不应该被捕获。

答案 2 :(得分:0)

也提供非正则表达方式:

string = """
Q: asd:rad:asd:ad asd:fztf:123
A: asd:rad:asd
"""

splitted = [":".join(line.split(":")[:3]) 
                for line in string.split("\n") 
                if len(line) > 1]

print(splitted)
# ['Q: asd:rad', 'A: asd:rad']