【问题标题】:Python pyparsing file with bracketed strings带有括号字符串的 Python pyparsing 文件
【发布时间】:2014-08-06 13:13:43
【问题描述】:

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

{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 组括号)的情况下,创建语法的最佳方法是提取括号内的字符串并从中创建一个列表。

最终的结果是在列表元素之间进行比较。

【问题讨论】:

  • 欢迎来到 Stack Overflow!每条线是否代表一组数据?每行中的一项是否是查找该数据的有用键?
  • {} 中是否有白字?
  • {} 括号内没有空格 - 但如果您看到上面的示例,括号之间有一个空格
  • @Robᵩ 谢谢!每一行都是一组数据,但每一行都是独立的,并且与其他行不同。只会在每行数据内进行比较。不,很遗憾没有有用的密钥。
  • 很可能会在列表中的元素#1 和#3 之间进行比较。例如,从上面的第三行中,比较将针对 {js02041_sc84647_GBP_Analytics} 和 {js02041}。

标签: python text-parsing pyparsing brackets


【解决方案1】:
for line in f.readlines():
    line.strip('{}').split('} {')`

应该将文件中的每一行转换为字符串列表。然后,您可以根据需要进行比较。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2011-02-17
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多