【问题标题】:Python, regex to split alphanumeric string with multiple separatorsPython,正则表达式用多个分隔符分割字母数字字符串
【发布时间】:2022-06-23 21:49:44
【问题描述】:

早上好,
我有一系列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. 延长期限前两个字母。

非常感谢!

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您可以尝试以下正则表达式解决方案:

    import re
    
    s = '52798687KF_12712320CP.txt'
    print(re.findall(r"[^\W\d_]+|\d+", s))
    

    输出:

    ['52798687', 'KF', '12712320', 'CP', 'txt']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2017-12-19
      • 2014-11-06
      • 1970-01-01
      相关资源
      最近更新 更多