gpt4 book ai didi

java - java中的正则表达式和替换

转载 作者:行者123 更新时间:2023-12-04 06:59:28 25 4
gpt4 key购买 nike

我正在尝试以最优雅的方式剥离和替换如下所示的文本字符串:

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

看起来像:
<item> {$i/child::itemno} 

因此删除元素文本替换其大括号并删除文本及其伴随的大括号。

我相信合适的正则表达式是:
/element\s*\{"([^"]+)"\}\s*{text\s*{\s*}\s*({[^}]*})/

但我不确定在 java 中使用的反斜杠数量,以及如何完成使用我的 group(1) 并将其替换为 < 开头和 > 结尾的最终替换:

到目前为止,我已经有了这个(虽然也许完全重写我可能会更好?)
 Pattern p = Pattern.compile("/element\\s*\\{\"([^\"]+)\"\\}\\s*{text\\s*{\\s*}\\s*({[^}]*})/ "); 
// Split input with the pattern
Matcher m = p.matcher("element {\"item\"} {text {\n" +
" } {$i/child::itemno} text { \n" +
" } {$i/child::description} text {\n" +
" } element {\"high_bid\"} {{max($b/child::bid)}} text {\n" +
" }} ");

//接下来对于组 1 的每个实例,在开始处将其替换为 < >

我想我偶然发现了一个问题。我正在尝试做的事情比我之前说的要困难一些。有了下面的解决方案:

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>

最佳答案

  • Java regex-es 编写时没有分隔符。所以丢掉正斜杠;
  • 每一个反斜杠都需要一个额外的,所以 \s变成 \\s ;
  • 全部 {需要转义:\\{ , 和 }不需要逃避(尽管如果你真的逃避它们也不会受到伤害)。

  • 尝试:
    String text = "element {\"item\"} {text { } {$i/child::itemno}";
    System.out.println(text.replaceAll("element\\s*\\{\"([^\"]+)\"}\\s*\\{text\\s*\\{\\s*}\\s*(\\{[^}]*})", "<$1> $2"));

    输出:
    <item> {$i/child::itemno} 

    关于java - java中的正则表达式和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2103563/

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