是否存在可以将方括号和括号的内容提取到列表或数组中的表达式?这就是我所拥有的,它提取括号中的完整字符串。我只想要括号中的文字。
String example = "[21](BULK(KIN[1[35]](MARK)))";
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(example);
while(m.find()) {
System.out.println(m.group(1));
}
答案 0 :(得分:0)
通过指定应该忽略哪些字符并在整个String上无限重复该字符来做到这一点,就像这样:
[^\[\]\(\)]+
最后的+
避免匹配空匹配项。
不过,这不会检查设置的括号和括号是否正确。
我的代码如下:
String example = "[21](BULK(KIN[1[35]](MARK)))";
Matcher m = Pattern.compile("[^\\[\\]\\(\\)]+").matcher(example);
while(m.find()) {
System.out.print(m.group(0)+ " ");
}
java使用此字符作为转义符本身会产生双反斜杠。另外请注意,我更改了打印语句,使其行为与您在问题下方的注释中所述的一样。
答案 1 :(得分:0)
如果您只想提取字母组成的部分,则可以搜索以下内容:
Matcher m = Pattern.compile("([a-zA-Z]+)").matcher(example);
,然后在while循环中收集匹配项。 编辑:
Matcher m = Pattern.compile("(\\w+)").matcher(example);
提取所有单词文字,包括数字。
答案 2 :(得分:0)
您可以使用以下正则表达式提取感兴趣的字符串:
/(?<=\[|\()[^\[\]\(\)]+/x
对于字符串
"[21 is a winner](BULK(KIN[1[35]](MARK my man)))"
与此正则表达式的匹配为"21 is a winner"
,"BULK"
,"KIN"
,"1"
,"35"
和"MARK my man"
。
正则表达式读取,“匹配一个或多个(+
)字符,而不是(^
字符串'[]()'
([^\[\]\(\)]
是字符类),其后紧跟'('
或'['
((?<=\[|\()
是正向后看)。
应注意,如果字符串的括号或括号不平衡,则可获得相同的结果:
"[21 is a winner((BULK]KIN(1[35]](MARK my man[[["
可以编写正则表达式来确认括号和括号是否平衡(使用子表达式),但是如果需要的话,将其分开检查会更简单。这可以通过创建一个空堆栈,然后使用以下规则逐个字符地处理字符串来完成:
请注意,在任何给定时间,堆栈仅包含字符'('
和'['
。
答案 3 :(得分:0)
您可以执行以下操作:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
String example = "[21](BULK(KIN[1[35]](MARK)))";
Matcher m = Pattern.compile("\\w+").matcher(example);
while (m.find()) {
list.add(m.group());
}
System.out.println(list);
// Array
String[] arr = list.toArray(new String[0]);
System.out.println(Arrays.toString(arr));
}
}
输出:
[21, BULK, KIN, 1, 35, MARK]
[21, BULK, KIN, 1, 35, MARK]