我对正则表达式的经验很少,所以提前谢谢。
我有一个字符串,
Doe Jane,Doe John。苏斯博士的作品。哈佛出版社(1984)。我正在使用string.split(regex)根据我提供的正则表达式将字符串拆分为String []。我想把它分成作者,标题,出版物信息。问题只是使用[。]在博士之后将其分解。
如何编写包含'。'的重复数据。但排除“博士”之类的东西或'先生' ?
由于
答案 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
干杯,尤金。