我的名字像“John Connele MCA MD”
和“John O'Connele”
,我使用了这个正则表达式“s*[A-Z]+( ?:\.|\b)"
.
String fullName = "John O'Connele MCA MD";
fullName = fullName.replaceAll("s*[A-Z]+(?:\.|\b)","").trim;
System.out.println(fullName)
正则表达式的目的是仅删除称呼和标题,我得到的输出是“John Connele”
,而正确的输出应该是“John O'Connele”
最佳答案
您可以使用
\W*\b[A-Z]+\b(?!'\b)\.?
请参阅regex demo 。
详细信息
\W*
- 任意 0+ 个非单词字符\b
- 单词边界(我们需要匹配整个单词)[A-Z]+
- 1+ 个大写 ASCII 字母\b
- 词尾(词边界)(?!'\b)
- 后跟单词 char 的'
不允许紧邻当前位置的右侧\.?
- 1 或 0.
个字符。
Java demo (请注意,所有反斜杠在字符串文字内都是双斜杠,以表示文字反斜杠、正则表达式转义):
String fullName = "John O'Connele MCA,MD.";
fullName = fullName.replaceAll("\\W*\\b[A-Z]+\\b(?!'\\b)\\.?","").trim();
System.out.println(fullName); // => John O'Connele
关于java - 使用正则表达式从全名中删除称呼语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925019/