我对Java并不陌生,但之前没有处理过正则表达式和模式。我想要做的是采取一个字符串像将字符串拉出字符串的模式
"Class: " + data1 + "\nFrom: " + data2 + " To: " + data3 + "\nOccures: " + data4 + " In: " + data5 + " " + data6;
并只拉出data_1到data_n。
我感谢任何帮助。
我对Java并不陌生,但之前没有处理过正则表达式和模式。我想要做的是采取一个字符串像将字符串拉出字符串的模式
"Class: " + data1 + "\nFrom: " + data2 + " To: " + data3 + "\nOccures: " + data4 + " In: " + data5 + " " + data6;
并只拉出data_1到data_n。
我感谢任何帮助。
使用这个表达式:
Pattern pattern = Pattern.compile("Class: (.+?)\nFrom: (.+?) To: (.+?)\nOccures: (.+?) In: (.+?) (.+?)");
Matcher matcher = pattern.matcher(yourInputString);
if (matcher.find())
{
String data1 = matcher.group(1);
String data2 = matcher.group(2);
String data3 = matcher.group(3);
String data4 = matcher.group(4);
String data5 = matcher.group(5);
String data6 = matcher.group(6);
} else
{
// String didn't match the specified format
}
说明:
.+?
将匹配不确定的时间任意字符,但不贪婪。
()
,使用括号会创建一个组。一个组被给予从1开始的索引(因为组0是整个匹配)
因此,(.+?)
将创建任何字符的组。
匹配器的功能是在输入字符串的某处搜索整个模式。但是,既然你指定了格式,我们确切知道你的整个字符串是怎么样的。您唯一需要做的就是复制格式并将要提取的数据替换为“”“(.+?
),您可以通过创建一个索引来给出索引。
之后,匹配将设法找到(由matcher.find()
完成)的模式,你问他们的内容是什么组1高达6
感谢一堆:D你介意解释模式在做什么?如果不是,我可以查看它。我只是想知道我所有的代码在做什么。 – Mastergeek
Marvilous work Martijn。非常感谢。关于模式在做什么的帮助和解释。 – Mastergeek
关于采用分体式如何()用“:”然后从splitted String []获取字符串[2i + 1]? (我从0)
大声笑我正要这样做XD – Mastergeek