[英]Python Regex match all occurrences of decimal pattern followed by another pattern
[英]Regex should fail if pattern is followed by another pattern
我需要檢測消息中提到的@username
,但如果它是@username[user_id]
的形式則不需要。 我有一個可以匹配@username
部分的正則表達式,但如果它后面跟着\[\d\]
,我很難否定匹配。
import re
username_regex = re.compile(r'@([\w.@-]+[\w])')
usernames = username_regex.findall("Hello @kevin") # correctly finds kevin
usernames = username_regex.findall("Hello @kevin.") # correctly finds kevin
usernames = username_regex.findall("Hello @kevin[1].") # shouldn't find kevin but does
正則表達式允許包含@
, 的用戶名.
和-
,但需要以\w
字符( [a-zA-Z0-9_]
)結尾。 如果用戶名后跟[1]
表單中的用戶 ID,我如何擴展正則表達式以使其失敗?
我試過@([\w.@-]+[\w])(?!\[\d+\])
但它匹配kevi
我正在使用 Python 3.10。
您可以“模擬”所有格匹配
@(?=([\w.@-]*\w))\1(?!\[\d+\])
請參閱正則表達式演示。
詳情:
@
- 一個@
字符(?=([\w.@-]*\w))
- 匹配並捕獲到第 1 組零個或多個單詞的正向前瞻, .
, @
和-
字符,盡可能多,然后在當前 position 右側緊接一個單詞 char(文本不被消耗,正則表達式引擎索引保持在同一位置)\1
- 在第 1 組中匹配和捕獲的文本(這會消耗使用前瞻模式捕獲的文本,請注意反向引用本質上是原子的)(?!\[\d+\])
- 如果當前位置右側有[
+ 一位或多位數字 + ]
則匹配失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.