匹配多个正则表达式组并删除它们

时间:2009-11-24 16:12:15

标签: python regex lexical-analysis

我收到了一个文件,我想从中提取有用的数据。该文件的格式如下:

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

3 个答案:

答案 0 :(得分:4)

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)

答案 1 :(得分:2)

不需要在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 :(得分:1)

如何用空字符串(^LINE: \d+$)|(^\w+:)替换""

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