我有以下格式的列表:
data =['| test_data_14865428_0 |', '| test_data_1486612450_0 |', '| test_template |', '|id_1475020800_0 |']
我想将格式test_data_ *的所有列表元素提取到一个新列表(表格)中。列表表应以test_data _ *
格式存储名称我的尝试:
import re
tables = []
pattern = re.compile("| test_data\S")
for i in range(0, len(data)):
if pattern.match(data[i]):
tables.append(data[i])
print(list_of_tables)
答案 0 :(得分:0)
由于您的所有数据都包含子字符串test_data_
,因此您可以在不需要正则表达式的情况下过滤该静态短语:
data = filter(lambda v: 'test_data_' in v, data)
如果您想过滤掉空格和管道分隔符,可以使用translate来删除不需要的字符:
data = map(lambda v: v.translate(None, " |"), data)
当然,表达式可以组合成复合表达式。
上面原始代码中正则表达式的一个问题是|
需要进行转义,因此它将按字面意思处理。目前,它被视为替代运营商。
虽然可能不是最优雅的实现,但以下是一个选项:
import re
pattern = re.compile("\| *(test_data_[\d_]+)")
def search(val):
found = pattern.match(val)
return found and found.group(1)
print(filter(lambda f: f, map(search, data)))
带有身份映射的过滤器只删除没有匹配的记录。
答案 1 :(得分:0)
使用filter
选择包含“test_data_”的值,然后在这些值之间映射函数以清理字符串。不需要正则表达式。
import operator
td = map(lambda s: s[2:].split(' ', 1)[0],
filter(operator.methodcaller('startswith', '| test_data_'),
data))
print(list(td))