gpt4 book ai didi

java - 在 Java 中用正则表达式剥离和替换文本字符串

转载 作者:行者123 更新时间:2023-12-02 08:35:02 24 4
gpt4 key购买 nike

我正在尝试以最优雅的方式删除和替换文本字符串:

通过解决方案,我有 /element\s*\{"([^"]+)"\}\s*{text\s*{\s*}\s*({[^} ]*})/

text.replaceAll("element\\s*\\{\"([^\"]+)\"}\\s*\\{text\\s*\\{\\s*}\\s*(\\{[^}]*})", "<$1> $2"));

用于以下文本:

element {"item"} {text { } {$i/child::itemno} text { } {$i/child::description} text { } element {"high_bid"} {{max($b/child::bid)}} text { }} 

给予:

<item> {$i/child::itemno} text { } {$i/child::description} text { } element {"high_bid"} {{max($b/child::bid)}} text { }}

当我试图实现:

<item>{$i/child::itemno}{$i/child::description}<high_bid>{fn:max($b/child::bid)}</high_bid></item> 

最佳答案

经过查看,问题是正则表达式只匹配一次。

您的正则表达式正在寻找 element{"tag"} {text { } {text_here}

这只在您的输入中出现一次:

element {"item"} {text { } {$i/child::itemno}

没有其他匹配:

text { } element {"high_bid"} {   => NO MATCH, text without element before it

element {"high_bid"} {{max($b/child::bid)}} text { } => NO MATCH, text after braces

因此,要么您的输入错误,要么您需要比一次性正则表达式更好的东西。

话虽如此,我认为正则表达式在这里不起作用。您可以删除所有“text { }”元素,这似乎没有任何作用:

text.replaceAll("text\\s*\\{\\s*}", ""));

这给你:

element {"item"} { {$i/child::itemno}  {$i/child::description}  element {"high_bid"} {{max($b/child::bid)}} }

但这里的问题是你有嵌套。如果您只是匹配大括号,您如何知道匹配多远?您需要您的正则表达式来理解您有多少个左大括号,并找到正确的右大括号。这对于正则表达式来说实际上是不可能实现的。您需要一个函数来解析字符串,计算左大括号并减去右大括号。当你得到零的计数时,你就找到了一个集合...当然,这不是正则表达式。

关于java - 在 Java 中用正则表达式剥离和替换文本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106126/

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