разделитель регулярных выражений Java - PullRequest
2 голосов
/ 07 февраля 2012

У меня очень мало опыта в регулярных выражениях, поэтому спасибо заранее.

У меня есть строка вроде

Доу Джейн, Доу Джон.Работы доктора Суесса.Harvard Press (1984).

Я использую string.split (regex), чтобы разбить строку на String [], основываясь на регулярном выражении I.Я хочу разделить его на авторов, заголовок, информацию о публикации.Проблема только в том, что использование [.] Разбивает его и после доктора.

Как я могу написать регулярное выражение, включающее «.»но исключить что-то вроде «доктор»или "мистер"?

Спасибо

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012

Я бы рекомендовал использовать специализированный пакет для разбора библиографических записей, например ParsCit.

Я попробовал их веб-интерфейс, и, кажется, он правильно разбирает ваш пример из коробки.

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

1 голос
/ 07 февраля 2012

Используйте отрицательное регулярное выражение вида вот так:

str.split("(?<!(D|M|J|S)r)\\.\\s*");

Пример кода:

String str="Mr. Doe Jane, Doe John Sr.. The Works of Dr. Suess. Harvard Press(1984).";
String[] arr = str.split("(?<![DMJS]r)\\.\\s*");
for (int i=0; i<arr.length; i++)
    System.out.println(arr[i]);

ВЫХОД:

Mr. Doe Jane, Doe John Sr.
The Works of Dr. Suess
Harvard Press(1984)
1 голос
/ 07 февраля 2012

Вы можете использовать отрицательный вид сзади:

(?<!Dr|Mr)\.
0 голосов
/ 07 февраля 2012

Для этого нужно использовать какой-то негативный взгляд, как в следующем примере:

String input = "Doe Jane, Doe John. The Works of Dr. Suess. Harvard Press(1984)";
String [] tokens = input.split("(?<!Dr|Mr)\\.");
for(String token : tokens){
        // this will output3 tokens
    System.out.println(token);
}

То, что это говорит, разделено на. (точка), НО вещь, которая стоит за (? <знак), эта точка должна быть другой (! знак), чем доктор или (| знак) Мистер </p>

Ура, Евгений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...