我会有这样的话
String text = [ name abc ]
String text = [ name # abcd]
String text = [ name - abcd]
String text = [ name abcde ]
我想将这些单词拆分为abc,abcd,abcde
这里的分隔符可以是onlyspaces,spaces#spaces,spaces-spaces和nospace。
我要匹配此正则表达式
Pattern pat = Pattern.compile("\[\s*name\s*(-|#)\s*[a-z0-9]+\s*\]",Pattern.CASE_INSENSITIVE);
Matcher matcher = pat.matcher(text);
while (matcher.find()) {
String subseq = matcher.group();
String extractName = subseq.split("(-|#|\\s*)", 2)[1].replaceAll("]", "").trim();
}
此代码无法用于[name mynameisDON],但适用于[name:abc]
我想知道什么正则表达式传递给此拆分函数,以便我可以实现自己想要的东西。
答案 0 :(得分:1)
尝试一下:
private static void test(String text) {
Matcher m = Pattern.compile("\\[\\s*(?i:name)\\s+(?:[#-]\\s+)?([^\\]\\s]+)\\s*\\]").matcher(text);
if (m.matches()) {
System.out.println("name: '" + m.group(1) + "'");
} else {
System.out.println("Invalid: '" + text + "'");
}
}
测试
test("[ name abc ]");
test("[ name # abcd]");
test("[ name - abcd]");
test("[ name abcde ]");
test("[ name : abcd]");
test("[ name#abcd]");
输出
name: 'abc'
name: 'abcd'
name: 'abcd'
name: 'abcde'
Invalid: '[ name : abcd]'
Invalid: '[ name#abcd]'