我有一个字符串 一个=“的 A + F (KP醇)-g(JP-NL)+ H(JO-NK) - 的 B + E (KP醇)-g (IP-毫升)+ H(IO-MK)+的 CE (JP-NL)“
现在我想删除字符之间的+/-,看起来字符是相乘的。 (即) 在dis字符串中取一个+ f转换为af ...删除+之间......类似于整个字符串。
任何人都可以建议使用正则表达式的解决方案
答案 0 :(得分:1)
([a-zA-Z])[+-](?=[a-zA-Z])(?![^(]*\))
见demo。替换为$1
。
这会在任何+-
符号之前捕获一个字母,并使用前瞻来断言“它后面有一个字母”。为了确保它不在括号内,另一个先行者会断言“不应该有)
后面没有(
”。捕获的字母将替换为$1
后存储的字样。
你可以使用正面的lookbehind而不是捕获组。
(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\))
Java正则表达式,
"(?<=[a-zA-Z])[+-](?=[a-zA-Z])(?![^()]*\\))"
然后用空字符串替换匹配的+
或-
符号。
答案 1 :(得分:0)
通过字边界+
环绕-
或\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)
匹配由paranthesis外部出现的字边界所包围的所有+
或-
符号。
"\\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)