Сопоставление нескольких групп регулярных выражений и удаление их
Мне дали файл, из которого я хотел бы извлечь полезные данные. Формат файла выглядит примерно так:
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 ответа
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)
Нет необходимости использовать регулярные выражения в 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()
Как насчет замены (^LINE: \d+$)|(^\w+:)
с пустой строкой ""
?
использование \n
вместо ^
а также $
также удалить ненужные пустые строки.