我有一个字符串“氧化锌(ZnO)”,我需要一个正则表达式来平衡括号,结果应该是“氧化锌(ZnO)”。我在regex上的工作并不多。有人能帮我解决正则表达式的问题吗?
String.replace将是解决方案,但我需要一个正则表达式来平衡任何字符串的括号,如示例中所示。
在这方面的任何帮助都将不胜感激。
发布于 2015-08-12 21:02:16
我完全同意你问题下面的评论,这是不可能创建正则表达式来平衡字符串中的括号,但如果你的字符串' balance‘像你的例子一样简单,你可以测试类似这样的东西:
"Zinc Oxide (ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)","");在demo中有一个\w\w\w,而不是像示例中那样的\\w{1,100},因为lookbehind中的这种语法只在Java语言中被允许(至少据我所知)。后视是零长度的点,因此在大多数正则表达式风格中,后视块((?<=...)、(?=...)等)不能包含限定符(+*?)或间隔({1,2}),但在Java中,如果间隔具有最小和最大长度,则允许这样做(因此仅在{n}或{min,max}形式中)。
但正如我上面所说的,它只适用于大多数简单的输入!!没有嵌套的括号等。Java中的示例:
public class Test {
public static void main(String[] args) {
System.out.println("Zinc Oxide (ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide ((ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide ((ZnO)".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide (ZnO)))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
System.out.println("Zinc Oxide (((ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)",""));
}
}带输出:
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)https://stackoverflow.com/questions/31961987
复制相似问题