python - 匹配所有不以 ':' Python 正则表达式开头的单词

标签 python regex lookbehind

您好,我需要匹配 :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+

regex101 demo

在代码中:

results = re.findall(r'(?<!:)\b\w+', string)

关于python - 匹配所有不以 ':' Python 正则表达式开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529232/

相关文章:

Python:Facebook API 显示无效 token

python - 对 Django-Haystack 的重建/更新索引有点困惑

python - 为什么多线程快速排序比Python中的普通快速排序慢?

python - Twitter 搜索 API 身份验证

java - 什么正则表达式将在收据上列出最后的价格?

ruby - Ruby 中的正则表达式负后视似乎不起作用

javascript - js正则表达式转义引号

javascript - 如何检查正则表达式中输入的只是数字和空格?

r - 如何在句子中添加删除的空格?