匹配多个正则组并移除它们

3 投票
3 回答
6046 浏览
提问于 2025-04-15 16:20

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

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

等等...

我想做的是去掉“LINE:”和行号,还有“TOKENKIND:”,这样我就只剩下一个字符串,里面是'somedata somedata 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 个回答

1

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

\n 代替 ^$,这样也可以去掉多余的空行。

2

在Python中其实不需要用正则表达式。毕竟这是Python,不是Perl。想简单点,直接用Python的字符串处理功能就可以了。

f=open("file")
for line in f:
    if line.startswith("LINE:"): continue
    if "TOKENKIND" in line:
        print line.split(" ",1)[-1].strip()
f.close()
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)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答