gpt4 book ai didi

java - 正则表达式删除除关键字周围和引号之间的所有空格

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:32 25 4
gpt4 key购买 nike

我想:

  1. 删除所有空格,除非它正好在预定义关键字之前或之后(之前 0-1 个空格,之后 0-1 个空格)(例如:and, or, if then 我们在 "and "or "中保留空格和”或“和”不变)

  2. 忽略引号之间的一切

我尝试了很多模式。我想出的最接近的是非常接近,但它仍然删除了关键字后的空格,这是我试图避免的。

正则表达式:

\s(?!and|or|if)(?=(?:[^"]*"[^"]*")*[^"]*$)

测试字符串:

            if    (ans(this) >= ans({1,2})  and (cond({3,4})  or ans(this) <= ans({5,6})), 7, 8)  and {111} > {222}  or ans(this) = "hello    my friend and  or  " and(cond({1,2}) $1 123     

理想的结果:

 if (ans(this)>=ans({1,2}) and (cond({3,4}) or ans(this)<=ans({5,6})),7,8) and {111}>{222} or ans(this)="hello    my friend and  or  " and(cond({1,2})$1123

然后我可以在 java 中使用 str = str.replaceAll 来删除那些空格。我不介意执行多个步骤来获得结果,但我不熟悉正则表达式,所以有点卡住了。

如有任何帮助,我们将不胜感激!

注意:我编辑了结果。对于那个很抱歉。对于关键字周围的空格:如果有空格则缩小为 1。要么保留它,要么在它为 0 时添加 1 个空格(我只是不想让“or ans”变成“orans”,但是“and(cond”变成“and (cond)”就可以了(缩小到前 1 个空格和 1 个空格如果存在之后)。忽略引号之间的所有内容。

最佳答案

您巧妙地使用了捕获组。这里的一般想法是

match_this|or_this|or_even_this|(but_capture_this)

就正则表达式而言,这可能是

(?:(?:\s+(?:and|or|if)\s+)|"[^"]+")|(\s+)

只有当第一个捕获组不为空时,您才需要替换匹配项。


参见 a demo on regex101.com (使用 (*SKIP*)(*FAIL) 具有相同的目的)。

关于java - 正则表达式删除除关键字周围和引号之间的所有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297698/

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