[英]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.