我对正则表达式的经验很少,所以在此先感谢。java字符串正则表达式分隔符
我有一个像这样的字符串,
Doe Jane,Doe John。 Suess博士的作品。哈佛出版社(1984)。
我正在使用string.split(正则表达式)将字符串拆分为基于我提供的正则表达式的字符串[]。我想将它分成作者,标题和出版信息。问题只是使用[。]在博士之后分解它。
如何写一个regext来包含'。'但排除诸如'Dr.'之类的东西或'先生' ?
感谢
我对正则表达式的经验很少,所以在此先感谢。java字符串正则表达式分隔符
我有一个像这样的字符串,
Doe Jane,Doe John。 Suess博士的作品。哈佛出版社(1984)。
我正在使用string.split(正则表达式)将字符串拆分为基于我提供的正则表达式的字符串[]。我想将它分成作者,标题和出版信息。问题只是使用[。]在博士之后分解它。
如何写一个regext来包含'。'但排除诸如'Dr.'之类的东西或'先生' ?
感谢
可以使用负回顾后:
(?<!Dr|Mr)\.
使用负回顾后发正则表达式是这样的:
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]);
OUTPUT:
Mr. Doe Jane, Doe John Sr.
The Works of Dr. Suess
Harvard Press(1984)
这有此示例中使用某种负回顾后,如:
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);
}
它说的分割上。 (点),但后面的东西(?<符号)这个点必须是不同的(!符号)然后博士或(|符号)先生
干杯,尤金。
如果你想为书目条目编写一个通用的解析器,你必须剔除比正则表达式更“聪明”的东西。仅使用正则表达式意味着它将不得不考虑每个可能的由句点分隔的缩写,这基本上不可行。 – 2012-02-07 19:09:59