我有一個復雜的案例,我無法進一步了解。目標是通過 RegEx 檢查字串是否滿足以下條件:
- 正好12個字母
- 字母 W,S,I,O,B,A,R 和 H 在字串中只能出現一次
- 字母 T 和 E 在字串中只能出現 2 次。
- 重要的!順序必須無關緊要
示例匹配:
- 西托拜爾
- HREABOTTISW
- 西托巴勒
我的第一次嘗試:
results = re.match(r"^W{1}S{1}I{1}T{2}O{1}B{1}A{1}E{2}R{1}H{1}$", word)
第一次嘗試的問題在于,它僅在遵循 RegEx 中的字母順序時才匹配。違反條件4
我的第二次嘗試:
results = re.match(r"^[W{1}S{1}I{1}T{2}O{1}B{1}A{1}E{2}R{1}H{1}]{12}$", word)
試驗二的問題:現在順序不再重要,但單個字母的確切數量被忽略了。
到目前為止,我只能做 RegEx 的基礎知識,在這里無法進一步了解。如果有人知道符合上述四個規則的正則運算式是什么樣的,我將不勝感激。
uj5u.com熱心網友回復:
一種可能性,盡管我仍然認為正則運算式不適合這一點。檢查所有字母是否顯示為所需的數量,并且總共有 12 個字母(因此沒有空間可容納更多/其他字母):
import re
for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
print(re.fullmatch('(?=.*W)(?=.*S)(?=.*I)(?=.*O)'
'(?=.*B)(?=.*A)(?=.*R)(?=.*H)'
'(?=.*T.*T)(?=.*E.*E).{12}', s))
另一個,檢查 T 和 E 沒有出現兩次,沒有出現三次,并且我們只有所需的字母,總共 12 個:
import re
for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
print(re.fullmatch(r'(?!.*([^TE]).*\1)'
r'(?!.*(.).*\1.*\1)'
r'[WSIOBARHTE]{12}', s))
更簡單的方法:
for s in 'WSITTOBAEERH', 'HREEABOTTISW', 'WSITOTBAEREH':
print(sorted(s) == sorted('WSIOBARHTTEE'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430674.html
上一篇:如何檢查每行兩列或多列中字串的出現并將最后一列分配為0
下一篇:如何更改PHP中的文本?
