我有一個與此類似的檔案名字串串列(但很長):
list = ['AB8372943.txt', 'test.pdf', '123485940.docx', 'CW2839502.txt', 'AB1234567.txt', '283AB.txt']
我希望通過僅獲取匹配 4 個條件的字串來制作另一個串列:
- 以子串“AB”開頭
- 以子字串“.txt”結尾
- “AB”和“.txt”之間必須有任何7位數字
- 字串中沒有其他子字串(即只有上面的3項可以在字串中)
因此,在這種情況下,所需的結果將是以下串列:
list2 = ['AB8372943.txt', 'AB1234567.txt']
到目前為止,我知道要檢查我可以使用的 7 位數字:
list2 = [i for i in list if re.findall(r"\d{7}", i)]
以及如何在字串中查找子字串......但字串只包含子字串是不夠的,它們需要以特定的字串開頭和結尾,中間有一個 7 位數字,僅此而已!有沒有辦法做到這一點???
非常感謝您!
uj5u.com熱心網友回復:
還要確保它以以下開頭AB和結尾.txt:
my_list = ['AB8372943.txt', 'test.pdf', '123485940.docx', 'CW2839502.txt', 'AB1234567.txt', '283AB.txt']
my_list2 = [i for i in my_list if re.findall(r"^AB\d{7}.txt$", i)]
uj5u.com熱心網友回復:
你應該避免使用像list. 此外,如果字串不包含子字串,您可以使用re.matchwhich 將從字串的開頭開始匹配。
AB\d{7}\.txt\Z
模式匹配:
AB\d{7}匹配 AB 和 7 位數字\.txt匹配.txt并注意轉義點\Z字串結束
例如
import re
lst = ['AB8372943.txt', 'test.pdf', '123485940.docx', 'CW2839502.txt', 'AB1234567.txt', '283AB.txt']
lst2 = [s for s in lst if re.match(r"AB\d{7}\.txt\Z", s)]
print(lst2)
輸出
['AB8372943.txt', 'AB1234567.txt']
查看Python 演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368802.html
