Java 如何使用正则表达式删除字符之间的符号

Java 如何使用正则表达式删除字符之间的符号,java,regex,string,Java,Regex,String,我有一根绳子 a=“a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)” 现在我想去掉字符间的+/-,看起来字符是相乘的。 (即) 在dis字符串中,将a+f转换为af..remove+介于两者之间…整个字符串也是如此 有人能推荐一种使用regex的解决方案吗?环绕+或-通过单词边界\b在单词字符和非单词字符之间匹配 String s = "a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp

我有一根绳子 a=“a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)”

现在我想去掉字符间的+/-,看起来字符是相乘的。 (即) 在dis字符串中,将a+f转换为af..remove+介于两者之间…整个字符串也是如此


有人能推荐一种使用regex的解决方案吗?

环绕
+
-
通过单词边界
\b
在单词字符和非单词字符之间匹配

String s = "a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)";
System.out.println(s.replaceAll("\\b[-+]\\b", ""));
输出:

af(kpol)-g(jpnl)+h(jonk)-be(kpol)-g(ipml)+h(iomk)+ce(jpnl)

匹配所有的
+
-
符号,这些符号由出现在文本外部的单词边界包围

"\\b[-+]\\b(?![^()]*\\))"
例如:

String s = "a+f(kp-ol)-g(jp-nl)+h(jo-nk)-b+e(kp-ol)-g(ip-ml)+h(io-mk)+c-e(jp-nl)";
System.out.println(s.replaceAll("\\b[-+]\\b(?![^()]*\\))", ""));
输出:

af(kp-ol)-g(jp-nl)+h(jo-nk)-be(kp-ol)-g(ip-ml)+h(io-mk)+ce(jp-nl)
看。替换为
$1

这将捕获任何
+-
符号之前的一个字母,并使用前向断言“它后面有一个字母”。为了确保它不在括号内,另一个前瞻性语句被放置,它断言“不应该有一个
,它后面没有
)。捕获的字母在存储在
$1
中时被替换在单词后面

你可以使用积极的回头看,而不是一个捕获组

(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\))

(?只想在括号外的字符之间删除它们?只想在括号外删除它们..不想在括号内删除
(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\))
"(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\\))"