簡體   English   中英

Python,正則表達式用多個分隔符分割字母數字字符串

[英]Python, regex to split alphanumeric string with multiple separators

早上好,
我有一系列格式為52798687KF_12712320CP.txt的文件名,我從中提取了四個子字符串,即52798687KF12712320CP

目前,我通過一系列粗略的拆分操作來獲取這些元素:

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']

每個元素的一些細節:

  1. 至少一位數字;
  2. 兩個字母,在最后一個數字和下划線之間;
  3. 至少一個字母數字字符;
  4. 延長期限前的兩個字母。

真的非常感謝你!

您可以嘗試以下正則表達式解決方案:

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.

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