gpt4 book ai didi

python - 正则表达式:将字符串匹配到模式(可能不存在)

转载 作者:太空狗 更新时间:2023-10-30 01:55:00 25 4
gpt4 key购买 nike

<分区>

我正在尝试使用 Python 中的正则表达式分词器解析 XML 文档(这是一个有限集,所以正则表达式就可以了!),但我无法正确匹配注释。

这些评论的格式是<!--This is a comment-->其中评论本身可以包含各种非字母数字字符(包括“-”)

我想以将评论分解为以下标记的方式来匹配它们:

<!--

This is a comment

-->

开始标记很容易得到,我用另一个正则表达式成功地捕获了它,但评论正则表达式本身变得太贪婪并捕获了 --从结束标记。不过,我希望此正则表达式也能获取不一定包含在注释中的字符串,因此它也应该能够获取 <Tag>This is text</Tag>。并正确返回 This is text .

这是我目前用于文本的正则表达式:

[^<>]+(?!-->)

最终结果是 This is a comment-- ,当我只想要 This is a comment这样我的其他正则表达式就可以获取 --> .此正则表达式确实适用于普通标签,但是,由于结束标签上存在“<”并正确返回 This is text来 self 之前的例子。

我知道我不能正确地使用负前瞻。关于我在这里做错了什么的任何想法?我试过了 [^<>]+(?=-->) , 但是那不匹配任何不是这种形式的评论(比如普通标签)。我认为 (?!-->)当它看到那个模式时会停止匹配,但它似乎并没有那样工作,只是继续匹配直到它看到结尾的 '>'。

为上下文发布一段代码:

xml_scanner = re.Scanner([
(r" ", lambda scanner,token:("INDENT", token)),
(r"<[A-Za-z\d._]+(?!\/)>", lambda scanner,token:("BEGINTAG", token)),
(r"<\/[A-Za-z\d._]+(?!\/)>", lambda scanner,token:("ENDTAG", token)),
(r"<[A-Za-z\d._]+\/>", lambda scanner,token:("INLINETAG", token)),
(r"<!--", lambda scanner,token:("BEGINCOMMENT", token)),
(r"-->", lambda scanner,token:("ENDCOMMENT", token)),
(r"[^<>]+(?!-->)", lambda scanner,token:("DATA", token)),
(r"\r$", None),
])

for line in database_file:
results, remainder = xml_scanner.scan(line)

这是脚本目前正在做的唯一事情。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com