gpt4 book ai didi

regex - 使用 XQuery 进行模式匹配

转载 作者:行者123 更新时间:2023-12-03 15:57:37 25 4
gpt4 key购买 nike

我有一个 200MB 的巨大 XML 文档,其中包含文本信息。数据早先存储在具有 2 列的 pagemaker 文件中。标记后我发现某些文本有连字符。这是因为无法符合格式的单词被分解为由连字符分隔的 2 个单词。此 XML 文档使用连字符还有另一个原因。分隔短句(用于注释)。

我想找出单词之间的那些连字符。我注意到我想删除的连字符有一个标准模式。例如。

第一次使用连字符 - (我想查找和替换)

questionquestionanswer 将是 ans-wer

连字符的另一种用法是 -(未找到)

模式匹配 - 正则表达式 - ...

所以两者的标准格式是 -

空间空间

字母-字母

如何使用 XQuery 查找所有这些,即第二个...或者任何其他方式来找到它们......就像在巨大的 XML 文件中查找和替换它们......我的天..

最佳答案

200 MB 并不大。 :)

如果您完全确定在标记/属性名称中找不到连字符,请使用 sed(气馁!):

sed -E 's/([[:alpha:]]+)\-([[:alpha:]]+)/\1\2/g' doc.xml out.xml

为此最好使用 XQuery,这样您就不必处理复杂的 XML 语法解析:

declare function local:copy-replace($element as element()) {  
element {node-name($element)}
{$element/@*,
for $child in $element/node()
return
if ($child instance of element())
then local:copy-replace($child)
else replace($child, "(\w+)\-(\w+)","$1$2")
}
};

local:copy-replace(/*)

它还没有处理属性。如果属性中出现带连字符的文本,您将必须单独提取和包含它们。

一些学分转到some unknown user in this answer我很高兴作为一种模式记住了。

关于regex - 使用 XQuery 进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976350/

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