我会有这样的话
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] 有效
我想知道什么正则表达式传递给这个分割函数,这样我就可以实现我想要的。
最佳答案
试试这个:
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]'
关于java - 拆分至少包含一个特殊字符(如 - # 和一个空格)的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58715818/