如何使用正则表达式从文本文件中提取标记文本?

对于一个类,我需要提取元素之间的所有内容<seg>......</seg>我正在尝试通过 Python 来执行此操作,而不是浪费时间手动执行此操作(它超过 400 行)。我现在的代码方式是这样的(我在网上找到的一个代码并做了一些更改,以便它不打印行号):


import re                           

err_occur = [] 

pattern = re.compile(r"<seg>(.*)</seg>")

try:

    with open ('corpus.txt', 'rt') as in_file:

        for linenum, line in enumerate(in_file):

            if pattern.search(line) != None:

                err_occur.append((linenum, line.rstrip('\n')))

        for linenum, line in err_occur:

            print(line, sep='')

except FileNotFoundError:

    print("Input file not found.")

我遇到的唯一问题是它会在结果中打印<seg>和</seg>,这是我不希望发生的。我尝试创建组(您可以在我使用模式变量中的括号中看到),但我不知道如何操作代码以仅返回组 1(我尝试了许多不同的方法)。


蓝山帝景
浏览 170回答 3
3回答

哆啦的时光机

您需要使用positive lookbehind和一个positive lookahead.&nbsp;正则表达式中的<seg>and<\seg>会消耗一些文本,因此您可以在结果中看到它们,但是前瞻和后视只是分别检查是否存在</seg>和<seg>是否存在,而不会消耗任何字符。它只匹配那些字符串。TL;博士:&nbsp;前瞻和回顾后匹配字符串中&nbsp;<seg>string</seg>,而不是标签。所以你的正则表达式应该是这样的(?<=<seg>).*(?=</seg>),这应该没问题。有一些documantation这里
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python