簡體   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