Java 从多行字符串中提取文本
我有一个字符串MYSTRING和多行,如下所示:Java 从多行字符串中提取文本,java,android,regex,Java,Android,Regex,我有一个字符串MYSTRING和多行,如下所示: X:String1;;;; X1:String2 X2:3 YY1:4 我的目标是从上面的字符串中提取每个字符串。我发现以下公式: Pattern pattern = Pattern.compile("([\\n|;|:](X:|X1:)[0-9a-zA-Z-\\säöüÄÖÜß,]*[\\n|;])"); Matcher m = pattern.matcher(MYSTRING); if(m.find()) { String n
X:String1;;;;
X1:String2
X2:3
YY1:4
我的目标是从上面的字符串中提取每个字符串。我发现以下公式:
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);
}
有了上面的forumla,我成功地只得到了String1。
如何获取String2、String3等的其余部分?我通过双重匹配查询解决了这个问题,如下所示: 首先执行X的查询
pattern = Pattern.compile("([\\n|;|:](X:)[0-9a-zA-Z-\\säöüÄÖÜß,]*[\\n|;])");
m = pattern.matcher(MYSTRING);
if(m.find()) {
String string1 = m.group(1).substring(1);
}
然后对X1执行查询:
pattern = Pattern.compile("([\\n|;|:](X1:)[0-9a-zA-Z-\\säöüÄÖÜß,]*[\\n|;])");
Matcher m = pattern.matcher(MYSTRING);
if(m.find()) {
String string2 = m.group(1).substring(1);
}
这不是正确的方法,特别是如果你有很多字段,但至少对我来说只需查询两次就行了,可以被视为临时解决方案。将
if
更改为,而迭代所有匹配的文本。但是你的正则表达式看起来不对。例如,类似于[a | b]
的内容将表示并匹配singa
或
或b
。管道(|
)在[…]
中没有任何特殊意义(它不是或操作符)。正如我所提到的,我只成功地匹配了第一个sting。它是X,但我不能匹配X1、X2或yyy1Maybe?是的,但正如前面提到的,您的正则表达式也会接受您不期望的字符。例如,[…(X:| X1:)…]
将接受(
或X
或:
或|
或X
(这是不需要的,因为字符类已经包含X):
(与X
相同的问题,不再需要)和)
。让我重复一遍:character类允许我们匹配一组字符中的单个字符,因此[abc]
不会匹配整个abc
,而是a
或b
或c
,而不管它们的顺序如何。