使用正则表达式的文本行的字符解析

问题描述 投票:0回答:1

我有一个文件多行文本,我想分析出两条独立线路。我想这样的线路:

# x_be
# x_ls
# l_rs

因此,这将是“#”到一个行的末尾。另外,我想这样的线路:

所以,在这种情况下,这将是“ - ID:”直到一行的末尾。我怎样才能做到这一点?我以为代码愿像下面的示例,但是,这并不符合所有东西。

with open('C:\\path_here\\final_result.txt','r') as f:
    lines = f.read()

start = '^#'
end = '\n'

import re
results = re.findall(r'start\s+(.*?)\end',lines,flags=re.DOTALL)

prep_results = list(map(lambda x: x.split("\n"), results))

output = [start+','.join(i)+end for i in prep_results]

with open('C:\\path_here\\parsed.txt','w') as f:
    for line in output:
        f.write("%s\n" % line)

我想选择一个起点和终点,这样我就可以让这个充满活力,并挑选出在某些情况下多行。大部分时间虽然,我在寻找的开始和结束变量在同一行文字。

python python-3.x
1个回答
1
投票
import re

with open("input.txt","r") as f:
    data = f.read()

exclude = [" source"]
ex_reg = "(?!{})".format('|'.join(exclude))
start = ["#",'- id:']
start[1] += ex_reg 
end = "\n"
reg = re.compile('\s*({})'.format('|'.join(start)),flags=re.S)

for i in data.split(end):
    if re.match(reg,i):
        print(i.strip())

看起来矫枉过正,但你可以添加尽可能多的排除的话,只要你愿意。但是,当你添加它们,它们之前介意的空间。

© www.soinside.com 2019 - 2024. All rights reserved.