带有括号字符串的Python pyparsing文件

时间:2014-08-06 13:13:43

标签: python text-parsing pyparsing brackets

我有一个包含以下字符串结构的文件:

{dh31100_eurex_internalisation_uat} {DS_REG_PRIMARY} {dh31100} {MMI_PLUGIN_API} {MMI_PLUGIN_API} {20140730}
{ss26879_cc34355_BP_SK_UAT_REGRESSION} {DS_REG_PRIMARY} {dr48750} {MMI_PLUGIN_API} {MMI_PLUGIN_API} {20140730}
{js02041_ba89385_spreads} {DM_SERVER} {ba89385} {MMI_PLUGIN_API} {MMI_PLUGIN_API} {20140731}
{js02041_sc84647_GBP_Analytics} {DS_REG_PRIMARY} {js02041} {MMI_PLUGIN_API} {MMI_PLUGIN_API} {20140721}
...

整个文件的样式相同,通常包含> 100行。

在给定一致结构(总是6组括号)的情况下,创建语法的最佳方法是在括号内提取字符串并从中创建列表。

最终游戏将在列表元素之间进行比较。

2 个答案:

答案 0 :(得分:0)

for line in f.readlines():
    line.strip('{}').split('} {')`

应该将文件中的每一行转换为字符串列表。然后你可以按照自己的意愿比较它们。

答案 1 :(得分:0)

这将搜索一组{} - 引用的字符串。它将返回字符串列表的列表。

import re
import sys


# (?<={) = look-behind assertion. Only match if previous token was {
# .*?    = Non-greedy search for any character
# (?=})  = look-ahead assertion. Only match if next token will be }
pattern = '(?<={).*?(?=})'
pattern = re.compile(pattern)

with open(sys.argv[1]) as input_file:
    data = [pattern.findall(line) for line in input_file]

print data