我需要一个java正则表达式来分割以下模式中的单词。
句子将以@符号开头,并继续使用6个数字,然后是@符号。 然后是9个数字然后[符号 然后是6个数字和@符号 然后是2个数字
特殊字符和数字之间可能存在空格
For example :
@123456@ 123456789[ 123456@ 12
Here my output should be like :
string1 = 123456
string2 = 123456789
string3 = 123456
string4 = 12
以下正则表达式没有正确地分割单词。有人帮忙吗?
@[0-9]{6}@[0-9]{9}[[0-9]{6}@[0-9]{2}
感谢。
答案 0 :(得分:2)
您可以匹配捕获组:
Pattern regex = Pattern.compile("^@(\\d{6})@ *(\\d{9})\\[ (\\d{6})@ (\\d{2})");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
String firstGroup = regexMatcher.group(1);
// 123456
String secondGroup = regexMatcher.group(2);
// 123456789
String thirdGroup = regexMatcher.group(3);
// 123456
String fourthGroup = regexMatcher.group(4);
// 12
}
答案 1 :(得分:1)
您必须使用(...)
来填充“捕获”。
@([0-9]{6})@([0-9]{9})\[([0-9]{6})@([0-9]{2})
答案 2 :(得分:1)
您要拆分的正则表达式模式是:[@\[]\s*
。这个overview将有助于理解模式。
在Java中,它看起来如下:
String string = "@123456@ 123456789[ 123456@ 12";
String[] strings = string.split("[@\\[]\\s*");
strings
数组将包含所需的输出[123456,123456789,123456,12]
答案 3 :(得分:1)
您的模式中有错误
String s = "@123456@ 123456789[ 123456@ 12";
Pattern p = Pattern.compile("@(\\d{6})@\\s?(\\d{9})\\[\\s?(\\d{6})@\\s?(\\d{2})");
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
System.out.println(m.group(4));
}
答案 4 :(得分:1)
您只需使用String.split()
!
{
String[] strArr = "@123456@ 123456789[ 123456@ 12".split("[@\\[] ?");
string1 = strArr[0];
string2 = strArr[1];
string3 = strArr[2];
string4 = strArr[3];
}
Online Demo STDOUT :
123456个
123456789个
123456个
12
答案 5 :(得分:0)
答案 6 :(得分:0)
如果您不确定空格,请将*数量添加到0到无限制。 并确保逃避[
@[0-9]{6}@ *[0-9]{9}\[ *[0-9]{6}@ *[0-9]{2}
在RegEx-Tester http://erik.eae.net/playground/regexp/regexp.html
中正常工作