【发布时间】:2010-06-24 06:12:49
【问题描述】:
我的文字是这样的:
<Story>
<Sentence id="1"> some text </Sentence>
<Sentence id="2"> some text </Sentence>
<Sentence id="3"> some text </Sentence>
我的任务是在最后一个</Sentence> 之后插入一个结束标记</Story>。在正文中,每个</Sentence> 后跟3 个空格。我尝试使用正则表达式 </Sentence>(?!.*<Sentence) 捕获最后一个 </Sentence> 并使用 re.DOTALL 。但它不工作。
实际使用的代码是 line = re.sub(re.compile('</Sentence>(?!.*<Sentence)',re.DOTALL),'</Sentence></Story>',line)
请帮忙。谢谢。
【问题讨论】:
-
你真的应该为此use a parser。
-
@David @msw 对无效的 xml 使用解析器?解析器在看到格式不正确的 xml 文档时不会抛出异常吗?
-
好点,有些可以,但有些可以识别丢失的标签并自动添加。我想这取决于上下文。即便如此,当解析器抛出异常时,它可能包含无效标记的位置,这将是插入
</Story>标记的位置。 -
HTML Tidy 和 BeautifulSoup 都是专门为处理格式错误的标记而设计的。
-
用 Regex 解析 XML 听起来很简单,但除非使用 Regex 的好处超过不使用库的负面影响,否则不应该这样做。
标签: python xml regex last-occurrence