嗨,我需要从cola xx
匹配:ca:cr:pr cola xx
,但是当没有cola xx
出现时也能够获取ca:cr:pr
。以:
开头的标签数目可以不同,并且长度也可以不同。
>>> string
':ca:cr:pr cola xx'
>>> re.findall("\w+", string)
['ca', 'cr', 'pr', 'cola', 'xx']
>>> re.findall(":\w+", string)
[':ca', ':cr', ':pr']
>>> re.findall("^(:\w+)", string)
[':ca']
我试图也使用lookbehinds(http://runnable.com/Uqc1Tqv_MVNfAAGN/lookahead-and-lookbehind-in-regular-expressions-in-python-for-regex),但不安全。
>>> re.findall(r"(\s\w+)(?!:)",string)
[' cola', ' xx']
>>> string="cola"
>>> re.findall(r"(\s\w+)(?!:)",string)
[]
那就是当没有标签时,只有
cola
未被检测到。如何改善我的正则表达式以使其按预期工作?
所需的示例再次:
:c cola xx
-> cola xx
:ca:c cola xx
-> cola xx
:ca:cr:pr cola xx
-> cola xx
cola xx
-> cola xx
cola
-> cola
最佳答案
我相信,如果我正确理解了您的要求,类似的东西应该可以工作:
(?<!:)\b\w+
regex101 demo
在代码中:
results = re.findall(r'(?<!:)\b\w+', string)
关于python - 匹配所有以':'开头的单词python正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24529232/