gpt4 book ai didi

java - 替换不在括号内的逗号,引号

转载 作者:行者123 更新时间:2023-11-30 07:03:08 27 4
gpt4 key购买 nike

对于给定的输入字符串 abc,[def,ghi,ijk],lm,(no,pq,rs),[tu,vw,xy],zs,"as,as,fr"输出应该是

abc [def,ghi,ijk] lm (no,pq,rs) [tu,vw,xy] zs "as,as,fr"

我试过这个str.replaceAll("\\(.*?\\)|(,)", "");假设我的字符串是 str,它将替换不在 ( ) 内的逗号,但输出将不包含 ( ) 内的内容

非常感谢任何帮助

最佳答案

使用下面的正则表达式,然后用空格替换匹配的逗号。

,(?=(?:"[^\["(){}\]]*"|\([^\["{}()\]]*\)|\[[^\["{}()\]]*\]|\{[^\["(){}\]]*}|[^"\[{}()\]])*$)

,(?=(?:"[^"]*"|\([^()]*\)|\[[^\[\]]*\]|\{[^{}]*}|[^"\[{}()\]])*$)

DEMO

String s = "\"f,g\",abc,[def,ghi,ijk],lm,(no,pq,rs),[tu,vw,xy],zs,\"as,as,fr\",foo,{bar,buz}";
System.out.println(s.replaceAll(",(?=(?:\"[^\\[\"(){}\\]]*\"|\\([^\\[\"{}()\\]]*\\)|\\[[^\\[\"{}()\\]]*\\]|\\{[^\\[\"(){}\\]]*}|[^\"\\[{}()\\]])*$)", " "));

输出:

"f,g" abc [def,ghi,ijk] lm (no,pq,rs) [tu,vw,xy] zs "as,as,fr" foo {bar,buz}

解释:

  • , 匹配所有逗号

  • ,(?= 仅当其后跟,

  • "[^\["(){}\]]*" 双引号 block ,如 "foo,bar"

    /li>
  • | 或者

  • \([^\["{}()\]]*\)(foo,bar)

    这样的括号 block /li>
  • | 或者

  • \[[^\["{}()\]]*\] 方括号 block ,如 [foo,bar]

  • | 或者

  • \{[^\["(){}\]]*}{foo,bar} 这样的花括号 block

  • | 或者

  • [^"\[{}()\]] 除了 "(){[]}

  • 零次或多次。这适用于整体,就像 (foo,bar) 可以重复零次或多次。

  • $ 后跟行尾 anchor 。

关于java - 替换不在括号内的逗号,引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577472/

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