首页 > 解决方案 > 从括号出现开始的分隔字符串(正则表达式)

问题描述

我怎样才能达到这样的效果:“Ca(OH)2”=>“Ca”和“(OH)2”

在python中,可以这样实现:

import re

compound = "Ca(OH)2"
segments=re.split('(\([A-Za-z0-9]*\)[0-9]*)',compound)   
print(segments)

Output: ['Ca', '(OH)2', ''] 

我正在关注https://medium.com/swlh/balancing-chemical-equations-with-python-837518c9075b中的本教程(除了我想用 Java 来做)

(\([A-Za-z0-9]*\)[0-9]*)为了分解正则表达式,最外面的括号(靠近单引号)表示这是我们的捕获组,它是我们想要保留的。在它们之前带有正斜杠的内括号意味着我们想要从字面上找到括号(这称为转义) [A-Za-z0-9] 表示我们可以接受我们的任何字母(任何大小写)或数字括号和方括号后面的星号是量词。这意味着我们可以在括号内包含零个或无限多个字母(无论大小写)或数字。和结尾附近的 [0-9] 表示我们希望在拆分中包含括号右侧的所有数字。

我试图用 Java 来做,但输出不是我想要的:

String compound = "Ca(OH)2";
String[] segments = compound.split("(\\([A-Za-z0-9]*\\)[0-9]*)");
System.out.println(Arrays.toString(segments));

Output: [Ca]

标签: pythonjavaregex

解决方案


试试这个伙伴:

String[] segments = compound.split("([^\\w*])");

所以输出应该是:

ca , oh ,2 

希望它会帮助你!


推荐阅读