Регулярное выражение для соответствия "|" - PullRequest
7 голосов
/ 04 марта 2010

Эй, ребята, я пытаюсь использовать метод Java useDelimiter в своем классе Scanner для простого анализа. По сути, каждая строка представляет собой запись, разделенную символом «|», например:

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

Метод принимает в качестве параметра регулярное выражение, для которого сопоставляется. Может кто-нибудь предоставить мне регулярное выражение, которое будет соответствовать | (вертикальная черта, разделенная одним пробелом с обеих сторон).

Спасибо, я был бы очень признателен!

Ответы [ 5 ]

14 голосов
/ 04 марта 2010

Я придумал \s\|\s, который на Java будет выражаться как "\\s\\|\\s". Я не знаю, если это лучший, хотя. Мне не нужно ничего хардкорного, просто что-то, что работает, и это, кажется, :)

Извините, что ответил на мой вопрос, наверное, после того, как я его набрал, он помог мне подумать.

4 голосов
/ 04 марта 2010

Вот фрагмент кода, который анализирует строку (или весь файл, сканер принимает оба) и извлекает номер и имя из каждой строки:

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
0 голосов
/ 04 марта 2010

......

^[ \| ]?$
0 голосов
/ 04 марта 2010

Не забудьте включить * для соответствия повторяющемуся символу

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

Отредактировано - Вы можете просто использовать это тоже .*\|.*

0 голосов
/ 04 марта 2010
" \| " 

будет работать, вам нужно экранировать кавычки и |

...