代码之家  ›  专栏  ›  技术社区  ›  Jorge Israel Peña

与“”匹配的正则表达式

  •  7
  • Jorge Israel Peña  · 技术社区  · 15 年前

    嘿,伙计们,我试着用爪哇的 useDelimiter 它的方法 Scanner 类执行一些简单的解析。基本上每一行都是由“”分隔的记录,例如:

    2 | John Doe
    3 | Jane Doe
    4 | Jackie Chan
    

    该方法将要匹配的正则表达式作为参数。有人能给我提供一个匹配的正则表达式吗 | (两边用一个空格隔开的竖条)。

    谢谢,我真的很感激!

    5 回复  |  直到 15 年前
        1
  •  14
  •   Michael Brewer-Davis    15 年前

    我想到了 \s\|\s 在Java中,它将被表示为 "\\s\\|\\s" . 我不知道这是不是最好的。我不需要任何硬核,只要有用的东西,这似乎:)

    很抱歉回答了我自己的问题,我想在我把问题打出来之后,它帮助了我思考。

        2
  •  4
  •   Olivier Croisier    15 年前

    下面是一个代码片段,它解析一个字符串(或整个文件,scanner同时接受这两个字符串),并从每一行中提取数字和名称:

    String s = 
        "1 | Mr John Doe\n" + 
        "2 | Ms Jane Doe\n" + 
        "3 | Jackie Chan\n";
    
    Pattern pattern = Pattern.compile("(\\d+) \\| ((\\w|\\s)+)");
    Scanner scan = new Scanner(s);
    while (scan.findInLine(pattern) != null) {
        MatchResult match = scan.match();
    
        // Do whatever appropriate with the results
        System.out.printf("N° %d is %s %n", Integer.valueOf(match.group(1)), match.group(2));
    
        if (scan.hasNextLine()) {
            scan.nextLine();
        }
    }
    

    此代码段生成以下结果:

    N° 1 is Mr John Doe
    N° 2 is Ms Jane Doe
    N° 3 is Jackie Chan
    
        3
  •  0
  •   Fadrian Sudaman    15 年前

    不要忘记包含*以匹配重复字符

    \S*\s*\|\s*[\S\t ]*
    

    编辑- 你也可以用这个 .*\|.*

        4
  •  0
  •   adhanlon    15 年前
    " \| " 
    

    好的,你需要避开引号和|

        5
  •  0
  •   Sarfraz    15 年前

    ……

    ^[ \| ]?$