有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

要按“(字母或数字)”拆分的java正则表达式

对不起,这个问题可能已经有答案了,但我似乎找不到。我正在尝试拆分以下字符串:

Heading:
(A) point A
   (1) subpoint 1
   (2) subpoint 2
(B) point B

进入:

[Heading:, point A, subpoint 1, subpoint 2, ... ]

我目前的代码是:

section.split("\n[\\(\\D\\)]");

任何帮助都将不胜感激! (另外,附带问题是,是否可以将项目符号保留在分割阵列中?这样阵列将具有“(A)点A”,而不仅仅是“点A”?)


共 (2) 个答案

  1. # 1 楼答案

    您可以使用以下模式:

    \s*\([0-9a-zA-Z]\)\s*
    

    Demo

    细分:

    \s*         # Zero or more whitespace characters (including line breaks).
    \(          # Matches '(' literally.
    [0-9a-zA-Z] # Matches an English letter or digit.
    \)          # Matches ')' literally.
    \s*         # Zeror or more whitespace characters.
    

    注意:如果要匹配多个字母或数字,可以在字符类后添加+(即[0-9a-zA-Z]+

    Java示例:

    String pattern = "\\s*\\([0-9a-zA-Z]\\)\\s*";
    String section = "Heading:\n"
         + "(A) point A\n"
         + "   (1) subpoint 1\n"
         + "   (2) subpoint 2\n"
         + "(B) point B";
    
    String[] parts = section.split(pattern);
    System.out.println(Arrays.toString(parts));
    

    输出:

    [Heading:, point A, subpoint 1, subpoint 2, point B]
    

    Try it online

  2. # 2 楼答案

    \n\s*\(.\)\s?的正则表达式返回

    ['Heading:', 'point A', 'subpoint 1', 'subpoint 2', 'point B']
    

    \n\s*返回

    ['Heading:', '(A) point A', '(1) subpoint 1', '(2) subpoint 2', '(B) point B']