我应该使用正则表达式还是其他方式从日志文件中提取日志ID?

时间:2018-07-31 15:36:16

标签: python regex re-python

我有以下数据的列表:

["asdf mkol ghth", "dfcf 5566 7766", "7uy7 jhjh ffvf"]

我想在python中使用正则表达式来获取像这样的元组列表

[("asdf", "mkol ghth"),("dfcf", "5566 7766"),("7uy7", "jhjh ffvf")]

我尝试使用re.split,但出现错误,提示要解包的值太多。以下是我的代码:

logTuples = [()]
    for log in logList:
        (logid, logcontent) = re.split(r"(\s)", log)
        logTuples.append((logid, logcontent))

2 个答案:

答案 0 :(得分:0)

正则表达式在这里过大了:

l = ["asdf mkol ghth", "dfcf 5566 7766", "7uy7 jhjh ffvf"]

lst = [tuple(i.split(maxsplit=1)) for i in l]

print(lst)

打印:

[('asdf', 'mkol ghth'), ('dfcf', '5566 7766'), ('7uy7', 'jhjh ffvf')]

答案 1 :(得分:0)

从文档中:

https://docs.python.org/3/library/re.html

  

\ s

     

对于Unicode(str)模式:匹配Unicode空格字符   (其中包括[\ t \ n \ r \ f \ v]以及许多其他字符,用于   例如许多印刷术规则规定的不间断空间   语言)。如果使用ASCII标志,则仅匹配[\ t \ n \ r \ f \ v]。

有2个空格,因此有3个项目。

如果您的所有日志条目都有3个项目,并以空格分隔,并且您始终将其组织为(1,2 +''+ 3),则无需使用正则表达式来格式化它们:

logtuples = []
for log in loglist:
    splitlog = log.split(" ") #3 total elements
    logtuples.append (splitlog[0], splitlog[1] + " " + splitlog[2])