首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式来对齐括号

使用正则表达式来对齐括号
EN

Stack Overflow用户
提问于 2015-08-12 18:02:04
回答 1查看 358关注 0票数 0

我有一个字符串“氧化锌(ZnO)”,我需要一个正则表达式来平衡括号,结果应该是“氧化锌(ZnO)”。我在regex上的工作并不多。有人能帮我解决正则表达式的问题吗?

String.replace将是解决方案,但我需要一个正则表达式来平衡任何字符串的括号,如示例中所示。

在这方面的任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-08-12 21:02:16

我完全同意你问题下面的评论,这是不可能创建正则表达式来平衡字符串中的括号,但如果你的字符串' balance‘像你的例子一样简单,你可以测试类似这样的东西:

代码语言:javascript
复制
"Zinc Oxide (ZnO))".replaceAll("\\((?!\\w+\\))|(?<!\\(\\w{1,100})\\)","");

DEMO

在demo中有一个\w\w\w,而不是像示例中那样的\\w{1,100},因为lookbehind中的这种语法只在Java语言中被允许(至少据我所知)。后视是零长度的点,因此在大多数正则表达式风格中,后视块((?<=...)(?=...)等)不能包含限定符(+*?)或间隔({1,2}),但在Java中,如果间隔具有最小和最大长度,则允许这样做(因此仅在{n}{min,max}形式中)。

但正如我上面所说的,它只适用于大多数简单的输入!!没有嵌套的括号等。Java中的示例:

代码语言:javascript
复制
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})\\)",""));
    }
}

带输出:

代码语言:javascript
复制
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
Zinc Oxide (ZnO)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31961987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档