【发布时间】:2019-11-12 13:36:58
【问题描述】:
我有一个多行的字符串 MYSTRING,如下所示:
X:String1;;;;
X1:String2
X2:String3
YY1:String4
我的目标是从上面的字符串中提取每个字符串。我找到了以下公式:
Pattern pattern = Pattern.compile("([\\n|;|:](X:|X1:)[0-9a-zA-Z-\\säöüÄÖÜß,]*[\\n|;])");
Matcher m = pattern.matcher(MYSTRING);
if(m.find()) {
String name = m.group(1).substring(1);
}
通过上述论坛,我只成功获得了 String1。 如何获取 String2、String3、.....的其余部分?
【问题讨论】:
-
将
if更改为while以遍历所有匹配的文本。但是您的正则表达式看起来不正确。例如[a|b]之类的东西将代表和匹配唱歌a或|或b。管道(|)在[..]内部没有任何特殊含义(它不是or运算符)。 -
如前所述,我成功匹配了第一个 sting,即 X,但我无法匹配 X1、X2 或 YY1
-
是的,但如前所述,您的正则表达式也将接受您没有预料到的字符。例如
[...(X:|X1:)...]将接受(或X或:或|或X(这不是必需的,因为字符类已经包含X):(与X相同的问题,它不再需要)和)。所以让我重复一遍:字符类允许我们匹配一组字符中的单个字符,所以[abc]不会匹配整个abc但a或b或c,不管它们的顺序如何。