繁体   English   中英

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

[英]match all words not starting with ':' Python regex

嗨,我需要从:ca:cr:pr cola xx匹配cola xx ,但是当没有ca:cr:pr发生时,还能够获取cola xx :开头的标签数量可以不同,并且长度也可以不同。

>>> 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演示

在代码中:

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

为什么不将所有以冒号开头的单词全部替换为空呢?

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

希望这会起作用

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

我会做类似的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM