【问题标题】:Matching multiple regex groups and removing them匹配多个正则表达式组并删除它们
【发布时间】:2010-12-19 22:50:03
【问题描述】:

我收到了一个文件,我想从中提取有用的数据。文件的格式是这样的:

LINE: 1
TOKENKIND: somedata
TOKENKIND: somedata
LINE: 2
TOKENKIND: somedata
LINE: 3

等等……

我想要做的是删除 LINE: 和行号以及 TOKENKIND: 所以我只剩下一个由 'somedata somedate somedata...' 组成的字符串

我正在使用 Python 来执行此操作,使用正则表达式(我不确定它是否正确)来匹配我想要删除的文件的位。

我的问题是,如何让 Python 匹配多个正则表达式组并忽略它们,将我的正则表达式不匹配的任何内容添加到我的输出字符串中?我当前的代码如下所示:

import re
import sys

ignoredTokens = re.compile('''
    (?P<WHITESPACE>      \s+             ) |
    (?P<LINE>            LINE:\s[0-9]+   ) |
    (?P<TOKEN>           [A-Z]+:         )
''', re.VERBOSE)

tokenList = open(sys.argv[1], 'r').read()
cleanedList = ''

scanner = ignoredTokens.scanner(tokenList)

for line in tokenList:
    match = scanner.match()

    if match.lastgroup not in ('WHITESPACE', 'LINE', 'TOKEN'):
        cleanedList = cleanedList + match.group(match.lastindex) + ' '

print cleanedList

【问题讨论】:

    标签: python regex lexical-analysis


    【解决方案1】:

    无需在 Python 中使用正则表达式。毕竟是 Python,而不是 Perl。简单思考并使用其字符串操作功能

    f=open("file")
    for line in f:
        if line.startswith("LINE:"): continue
        if "TOKENKIND" in line:
            print line.split(" ",1)[-1].strip()
    f.close()
    

    【讨论】:

      【解决方案2】:
      import re
      
      x = '''LINE: 1
      TOKENKIND: somedata
      TOKENKIND: somedata
      LINE: 2
      TOKENKIND: somedata
      LINE: 3'''
      
      junkre = re.compile(r'(\s*LINE:\s*\d*\s*)|(\s*TOKENKIND:)', re.DOTALL)
      
      print junkre.sub('', x)
      

      【讨论】:

      • 完美。删除我的 for 循环并使用 sub() 工作正常。感谢您的帮助。
      【解决方案3】:

      用空字符串"" 替换(^LINE: \d+$)|(^\w+:) 怎么样?

      使用\n 代替^$ 也可以删除不需要的空行。

      【讨论】:

      • 抱歉,我认为我不够精确。我想知道的是,在我的 for 循环中,这是忽略 WHITESPACE、LINE 和 TOKEN 匹配的任何内容的正确方法吗?
      • Alex 发布了这个的即兴和 Python 化版本。
      猜你喜欢
      • 2021-03-13
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多