java - 拆分至少包含一个特殊字符(如 - # 和一个空格)的字符串

标签 java regex

我会有这样的话

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/

相关文章:

javascript - 如何调整谷歌地图的宽度和高度

regex - 使用正则表达式修剪尾随空格

Java递归函数将列表转换为这种数据结构

正则表达式替换匹配的组内容?

java - java fx Pane 中的圆 Angular

java - Netbeans 8.0.1 - 远程存储库包含未 merge 到本地分支的提交

javascript - 属性值的正则表达式

php - 捕获行尾字符串,但避免捕获匹配的尾随字符

java - 更新后 Spring MVC 不会显示正确的数据库值

java - 在 IntelliJ 中设置 Gradle 任务 `bootrun`