说,我有以下代码:
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
但是当我尝试使用该表达式修改正则表达式时
^\d{2}$|(?<=\s)\d{2}(?=\s)|(?<=\s)\d{2}$|^\d{2}(?=\s)
它不起作用...这就是我遇到的问题。我不喜欢使用正则表达式,因此感谢所有提前发布的人
这是我想要得到的结果:
print(strings_to_keep)
>>> ['data0', 'data23', 'data2', 'data55']
答案 0 :(得分:1)
在您的模式中,您使用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)
您可能会继续使用经过过滤的集合,而不是使用例如filter来创建新集合:
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']
答案 1 :(得分:0)
如果使用相同的模式,因为开销较小,则应使用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']