正则表达式提取方括号内外的字符串

时间:2019-01-18 17:48:03

标签: java regex

我找到了很多答案,这些答案告诉您如何在方括号内提取文本以及如何在方括号外提取文本,但是两者都不做。

我有一个字符串:[Sometext]MoreText[SomeOtherText]

我希望获得[SomeText]MoreText[SomeOtherText]

可以使用正则表达式来完成吗?还是我最好循环遍历字符串并以这种方式提取它?我需要维持订单。

2 个答案:

答案 0 :(得分:1)

假设您没有嵌套的括号,可以尝试拆分

  • [之前 或
  • ]之后

这可以使用look-around mechanisms完成。

String yourText = "[Sometext]MoreText[SomeOtherText]";
String[] arr = yourText.split("(?<=\\])|(?=\\[)");
Arrays.stream(arr).forEach(System.out::println);

输出:

[Sometext]
MoreText
[SomeOtherText]

答案 1 :(得分:0)

您可以使用此正则表达式来匹配帖子中样本的数据,

\[(?:[^\]]*)\]|([a-zA-Z]+(?:\s+[a-zA-Z]+)*)

其中有两个子正则表达式作为替代,其中\[(?:[^\]]*)\]将捕获格式为[somedata]的任何文本,而([a-zA-Z]+(?:\s+[a-zA-Z]+)*)正则表达式将捕获格式为{{1}的数据}或somedata

Demo

示例Java代码,

somedata somemoredata somemoredatafurther

打印

String s = "[Sometext]MoreText[SomeOtherText] I am hoping to get [SomeText], MoreText, [SomeOtherText]";
Pattern p = Pattern.compile("\\[(?:[^\\]]*)\\]|([a-zA-Z]+(?:\\s+[a-zA-Z]+)*)");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}