[英]How to find certain words using regular expression in python?
我正在使用 Python 中的正則表達式學習繩索。 我有以下代碼:
import re
test = '"(Z101+Z102+Z1034+Z104)/4"'
regex = re.compile(r"[\(\+]([XYZ]\d\d\d)[\)\+]")
regex.findall(test)
它返回:
['Z101', 'Z104']
但是,當我將“Z101”更改為“YZ101”時:
import re
test = '"(YZ101+Z102+Z1034+Z104)/4"'
regex = re.compile(r"[\(\+]([XYZ]\d\d\d)[\)\+]")
regex.findall(test)
它返回:
['Z102', 'Z104']
目的是提取包含X
、 Y
或Z
后跟任意三位數的字符串。 因此,第一個代碼所需的 output 將是:
['Z101', 'Z102', 'Z104']
如何修復編譯並獲得正確的 output?
將re.findall
與模式[XYZ]\d{3}\b
一起使用:
test = '"(YZ101+Z102+Z1034+Z104)/4"'
matches = re.findall(r'[XYZ]\d{3}\b', test)
print(matches) # ['Z101', 'Z102', 'Z104']
您的模式正在尋找:
它沒有選擇“Z101”,因為當您添加“Y”時,substring 不會緊跟在“(”或“+”之前。
一種選擇是將 1 和 4 排除在模式之外。 在這個例子中,你會得到你想要的。 該模式將是 r'[XYZ]\d\d\d'。 但是,根據您的數據,這可能會在未來產生不同的問題。
另一種選擇是包含前綴字符“?”的可能性。 這 '?' 用作量詞時表示“零或一”(但它也可以修改其他量詞,但這是一個不同的主題)。 為此,您的模式將是 r"[(+][XYZ]?([XYZ]\d\d\d)[)+]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.