从SET数据类型中提取匹配表达式

时间:2018-07-05 11:13:38

标签: python python-2.7

我需要处理SET数据类型并找到所有匹配的模式。 我有一个有效的代码:

d=SET type input
fin_list=[]
for i in d:
    mat = re.findall(r"\w+\.\w+",str(i))
    if mat:
        fin_list.append(' '.join(mat))

print ','.join(fin_list)

例如:

Input:
 set(['databasename.tablename', 'hello', 'fact.table'])
Output:
 databasename.tablename,fact.table

请提出一种高效且Python化的方法。

3 个答案:

答案 0 :(得分:0)

这是使用str.join的另一种方法。

演示:

import re
d = set(['databasename.tablename', 'hello', 'fact.table'])
print( ", ".join(re.findall(r"\w+\.\w+", "|".join(d))) )

输出:

databasename.tablename, fact.table

答案 1 :(得分:0)

我只编译一次正则表达式模式,并使用list_comprehension:

import re

s = set(['databasename.tablename', 'hello', 'fact.table'])
rx = re.compile(r"\w+\.\w+")
fin_list = [" ".join(rx.findall(i)) for i in s if rx.search(i)]

print fin_list

给出预期的结果:

['databasename.tablename', 'fact.table']

答案 2 :(得分:0)

我不确定为什么要在append中使用join。

一个简单的班轮将为您完成这项工作。

d=SET type input
output = [element for element in d if "." in element] # this line if you want all the elements of set having '.' inside.
Time taken : 0:00:00.005000
output = [element for element in d if "." in element and element.count(".") == 1] # this if you want 1 '.' inside
Time taken: 0:00:00.007000
output = [element for element in d if "." in element and element.count(".") == 1 and not element.startswith(".")] # this if you dont want elements starting with '.'
print(",".join(output))
Time taken: 0:00:00.007000

Your code: 0:00:00.012000