首页 > 解决方案 > 用于匹配 Python 列表中的特定模式的正则表达式

问题描述

说,我有以下代码:

import re
strings_of_text = ['data0', 'data23', 'data2', 'data55', 'data_mismatch', 'green']
strings_to_keep = []
expression_to_use = r'^\d{2}$|(?<=\s)\d{2}(?=\s)|(?<=\s)\d{2}$|^\d{2}(?=\s)'
    
for string in strings_of_text:
    # If the string is data#
    if (re.search(expression_to_use, string)):
        strings_to_keep.append(string)
print(strings_to_keep)

我只关心添加带有模式“数据”的字符串,后跟一些数字。所以在这种情况下,我只想添加'data0', 'data23', 'data2', 'data55'

我怎样才能做到这一点?我想我需要,import re但我不知道如何使用它。

我已阅读:Python 正则表达式仅查找两位数

但是当我尝试使用这个表达式修改我的正则表达式时

^\d{2}$|(?<=\s)\d{2}(?=\s)|(?<=\s)\d{2}$|^\d{2}(?=\s)

它不起作用......这就是我卡住的地方。我是使用正则表达式的新手,所以感谢所有提前发布的人

编辑:

这是我想要得到的结果:

print(strings_to_keep)
>>> ['data0', 'data23', 'data2', 'data55']

标签: pythonregexpython-3.xstring

解决方案


在您的模式中,您使用了 4 个交替,但您没有考虑到这个词data

您可以改用re.match从字符串的开头开始匹配,并用于data\d+$匹配后跟 1 个以上数字的数据,直到字符串的结尾:

import re
strings_of_text = ['data0', 'data23', 'data2', 'data55', 'data_mismatch', 'green']
strings_to_keep = []
expression_to_use = r'data\d+$'

for string in strings_of_text:
    # If the string is data#
    if (re.match(expression_to_use, string)):
        strings_to_keep.append(string)

print(strings_to_keep)

Python 演示

您可能会继续使用过滤后的集合,而不是使用例如过滤器创建新集合:

import re
strings_of_text = ['data0', 'data23', 'data2', 'data55', 'data_mismatch', 'green']
strings_to_keep = []
expression_to_use = r'data\d+$'

strings_of_text = list(filter(lambda x: re.match(expression_to_use, x), strings_of_text))
print(strings_of_text)

结果

['data0', 'data23', 'data2', 'data55']

Python 演示


推荐阅读