用于匹配pythonlis中特定模式的正则表达式

2024-10-01 11:40:44 发布

您现在位置: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)

这里我只关心添加带有模式“data”的字符串,后跟一些数字。所以在本例中,我只想添加'data0', 'data23', 'data2', 'data55'

我该怎么做?我想我需要import re,但我不知道如何使用它。在

我读过这个:Python Regular Expression looking for two digits only

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

^{pr2}$

它不起作用。。。这就是我被困的地方。我不熟悉使用正则表达式,所以感谢所有提前发帖的人

编辑:

以下是我想要得到的结果:

^{3}$

Tags: oftotextimportredatastringuse
2条回答

在您的模式中,您使用了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 demo

您可以继续使用筛选后的集合,而不是使用例如filter:

^{pr2}$

结果

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

Python demo

如果使用相同的模式,则应该使用re.compile,因为它的开销较小。在

strings_of_text = ['data0', 'data23', 'data2', 'data55', 'data_mismatch', 'green']

import re
engine = re.compile(r'data\d+$')
strings_to_keep = [s for s in strings_of_text if engine.match(s)]
print(strings_to_keep) # ['data0', 'data23', 'data2', 'data55']

相关问题 更多 >