[英]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+
在代码中:
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.