为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2021-09-25 21:44:54
对于一个类,我需要提取元素之间的所有内容<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(我尝试了许多不同的方法)。
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您需要使用positive lookbehind和一个positive lookahead. 正则表达式中的<seg>and<\seg>会消耗一些文本,因此您可以在结果中看到它们,但是前瞻和后视只是分别检查是否存在</seg><seg>是否存在,而不会消耗任何字符。它只匹配那些字符串。

TL;博士: 前瞻和回顾后匹配字符串中 <seg>string</seg>,而不是标签。

所以你的正则表达式应该是这样的(?<=<seg>).*(?=</seg>),这应该没问题。

有一些documantation这里


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信