繁体   English   中英

Python:检查列表中的字符串是否匹配非常具体的条件

[英]Python: Check if strings in list match very specific conditions

我有一个与此类似的文件名字符串列表(但很长):

list = ['AB8372943.txt', 'test.pdf', '123485940.docx', 'CW2839502.txt', 'AB1234567.txt', '283AB.txt']

我希望通过仅采用符合 4 个条件的字符串来制作另一个列表:

  1. 从 substring "AB" 开始
  2. 以 substring ".txt" 结尾
  3. "AB" 和 ".txt" 之间必须有任意 7 位数字
  4. 字符串中没有其他子字符串(即字符串中只能有上面的3项)

因此,在这种情况下,所需的结果将是此列表:

list2 = ['AB8372943.txt', 'AB1234567.txt']

到目前为止,我知道要检查我可以使用的 7 位数字:

list2 = [i for i in list if re.findall(r"\d{7}", i)]

以及如何在字符串中查找子字符串...但是字符串仅包含子字符串是不够的,它们需要以特定的开头和结尾,并且中间有一个 7 位数字,仅此而已? 有没有办法做到这一点???

非常感谢您!

还要确保它以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)]

您应该避免使用像list这样的内置名称。 此外,如果字符串不包含子字符串,您可以使用re.match从字符串的开头开始匹配。

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)

Output

['AB8372943.txt', 'AB1234567.txt']

查看Python 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM