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

时间:2014-07-02 10:49:37

标签: python regex lookbehind

嗨,我需要匹配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

4 个答案:

答案 0 :(得分:5)

如果我理解你的要求,我相信这样的事情应该有效:

(?<!:)\b\w+

regex101 demo

在代码中:

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

答案 1 :(得分:0)

为什么不直接替换所有以冒号开头的单词?

result = re.sub(r":\w+\b", "", subject)

答案 2 :(得分:0)

希望这会起作用

re.findall("(?<!:)(\w+)", string)

答案 3 :(得分:0)

我做的事情如下:

(?<!:)\w+(?:\s\w+)?