您好,我需要匹配 :ca:cr:pr cola xx
中的 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 可乐 xx
-> 可乐 xx
:ca:c cola xx
-> cola xx
:ca:cr:pr cola xx
-> cola xx
可乐xx
-> 可乐xx
可乐
-> 可乐
最佳答案
如果我正确理解您的要求,我相信这样的事情应该可行:
(?<!:)\b\w+
在代码中:
results = re.findall(r'(?<!:)\b\w+', string)
关于python - 匹配所有不以 ':' Python 正则表达式开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529232/