java字符串正则表达式分隔符

时间:2012-02-07 19:06:51

标签: java regex string

我对正则表达式的经验很少,所以提前谢谢。

我有一个字符串,

Doe Jane,Doe John。苏斯博士的作品。哈佛出版社(1984)。

我正在使用string.split(regex)根据我提供的正则表达式将字符串拆分为String []。我想把它分成作者,标题,出版物信息。问题只是使用[。]在博士之后将其分解。

如何编写包含'。'的重复数据。但排除“博士”之类的东西或'先生' ?

由于

4 个答案:

答案 0 :(得分:4)

我建议使用专门的软件包来解析参考书目条目,例如ParsCit

我已经尝试过他们的Web界面,它似乎正确地解析了您的示例。

使用正则表达式,你将面临一场艰难的挣扎,因为你必须弄清楚并考虑标题中每一个可能使用的句号。

答案 1 :(得分:1)

你可以使用负面的lookbehind:

(?<!Dr|Mr)\.

答案 2 :(得分:1)

使用负面的lookbehind正则表达式:

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)

答案 3 :(得分:0)

这必须使用某种负面的lookbehind,如下例所示:

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);
}

这说明是分开的。 (点),但是后面的东西(?&lt; sign)这个点必须是不同的(!符号)然后Dr或(| sign)Mr

干杯,尤金。