簡體   English   中英

正則表達式獲取包含字母和(數字/某些特殊)的“單詞”,但不僅僅是數字

[英]regex to get “words” containing letters and (numbers/certain special), but not only numbers

簡而言之:我想匹配包含1個字母和至少1個(數字/某些特殊字符)的任何“單詞”(由空格分隔的連續字符集)。 這些“單詞”可以出現在句子的任何地方。

嘗試在python使用re到目前為止,作為一種模式,我有:

\\w*[\\d@]\\w*

哪個在大多數情況下有效; 但是,我不想要只有數字/特殊的“單詞”。 例如:

應該匹配:

h1DF346
123FE453
3f3g6hj7j5v3
hasdf@asdf
r3
r@

不應該匹配:

555555
@
hello
onlyletters

排除前兩個“不應該匹配”的問題。 覺得這里有一些我很想念的東西。 謝謝!

我會用| 或像這樣的運算符:

([A-Za-z]+[\d@]+[\w@]*|[\d@]+[A-Za-z]+[\w@]*)

你想要的意思:

  • 字母后跟數字@后跟任意組合,
  • 或數字@后跟字母后跟任意組合

在這里查看regex101演示

如果您正在使用正則表達式的其他部分中的組,請考慮使用非捕獲組(?:...)而不是(...)

使用這樣的先行斷言。

正則表達式: (?=.*[a-zA-Z])(?=.*[@#\\d])[a-zA-Z\\d@#]+

說明:

  • (?=.*[a-zA-Z])測試,如果something or not之后是一個字母。

  • (?=.*[@#\\d])測試,如果something or not之后是從給定的字符類的一個字符。

  • [a-zA-Z\\d@#]+匹配給定字符類中的一個或多個字符。

Regex101演示

雖然你有答案,但你仍然可以提高接受的正則表達式的速度:

(?=\d++[A-Za-z]+[\w@]+|[a-zA-Z]++[\w@]+)[\w@]{2,}

你需要更新的regex模塊:

import regex as re

string = "h1DF346 123FE453 3f3g6hj7j5v3 hasdf@asdf r3 r@ 555555 @ hello onlyletters"
rx = re.compile(r'(?=\d++[A-Za-z]+[\w@]+|[a-zA-Z]++[\w@]+)[\w@]{2,}')
print(rx.findall(string))
# ['h1DF346', '123FE453', '3f3g6hj7j5v3', 'hasdf@asdf', 'r3', 'r@']

劫持@Roberto的演示,你將大大減少尋找比賽所需的步驟(> 7000 vs 338,~20次)。

如果您僅為+(匹配1或更多)更改*(匹配0或更多),則可以正確地擊中所有內容。

\\ W + [\\ d @] \\ W +

除了5555 ...你能分辨出的字母和數字的分布是否還有其他模式? 你可以通過在[\\ d @]之前或之后用至少一個字母的要求替換\\ w來處理它嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM