Java 如何使用正则表达式删除字符之间的符号
我有一根绳子 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+介于两者之间…整个字符串也是如此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
有人能推荐一种使用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])(?![^()]*\\))"