[英]Best way to split a string in python with multiple separators - while keeping the separators
[英]Python, regex to split alphanumeric string with multiple separators
早上好,
我有一系列格式為52798687KF_12712320CP.txt
的文件名,我從中提取了四個子字符串,即52798687
、 KF
、 12712320
和CP
。
目前,我通過一系列粗略的拆分操作來獲取這些元素:
s = '52798687KF_12712320CP.txt'
f1 = s.split('_')[0][:-2])
f2 = s.split('_')[0][-2:])
f3 = s.split('_')[1][:-6])
f4 = s.split('_')[1][-6:-4])
我想用一條語句實現相同的結果,訴諸正則表達式,因為如下所述,名稱結構可能會因某些標准而異。
但是我被卡住了,因為我無法編寫合適的語法; 經過不同的嘗試,我想出了這個部分解決方案:
import re
s = '52798687KF_12712320CP.txt'
reg = r"(?<=\d)(?=\D)|(_)|(.[a-z]{3})|(?=\d).(?<=\D)"
x = re.split(reg, s)
但它會導致一個包含太多元素的列表:
['52798687', None, None, 'KF', '_', None, '12712320', None, None, 'CP', None, '.txt', '']
而我想要一個包含以下內容的列表:
['52798687', 'KF', '12712320', 'CP']
每個元素的一些細節:
真的非常感謝你!
您可以嘗試以下正則表達式解決方案:
import re
s = '52798687KF_12712320CP.txt'
print(re.findall(r"[^\W\d_]+|\d+", s.split(".")[0]))
輸出:
['52798687', 'KF', '12712320', 'CP']
由於您的第三組可以包含字母數字字符的混合,我會根據您的 4 點列表執行以下操作:
import re
reg = re.compile(r"(?i)^(\d+)([a-z]{2})_([a-z\d]+)([a-z]{2})\.")
s = "1AA_A1AAA.txt" # sample input
m = reg.match(s)
if m:
print(m.groups()) # ('1', 'AA', 'A1A', 'AA')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.