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

时间:2015-02-07 05:26:32

标签: java regex string

我有一个字符串  一个=“的 A + F (KP醇)-g(JP-NL)+ H(JO-NK) - 的 B + E (KP醇)-g (IP-毫升)+ H(IO-MK)+的 CE (JP-NL)“

现在我想删除字符之间的+/-,看起来字符是相乘的。 (即) 在dis字符串中取一个+ f转换为af ...删除+之间......类似于整个字符串。

任何人都可以建议使用正则表达式的解决方案

2 个答案:

答案 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)

DEMO

匹配由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)