英文:
How to remove all type of prefix salutation from string in java?
问题
假设我从输入中获得了一个字符串,名称为(例如:Mr . Aditya Jha
)。如何从输入开头移除称谓?
可能出现的称谓列表有:
先生,夫人,博士,小姐,女士,牧师,先生。 ,先生。 ,博士。 ,小姐。 ,女士。 ,牧师。 ,先生 。 ,先生 。 ,博士 。 ,小姐 。 ,女士 。 ,牧师。
是否有任何可以考虑到所有这些称谓的解决方案或正则表达式语句?
我尝试了这个:
name.replaceAll("\\s{2,}", " ").replaceFirst("(?i)(Mr . )", "").replaceFirst("(?i)(Mr |Mr. )", "").trim()
这个方法是有效的,但对于像 amra khan
这样的名字,它会移除 mr
。
英文:
Suppose I have string coming from Input with name (for eg: Mr . Aditya Jha
). How do I remove salutation from the start of input?
List of salutations that can come are:
Mr, Mrs, Dr, Miss, Ms, Rev, Mr. , Mr. , Dr. , Miss. , Ms. , Rev. , Mr . , Mr . , Dr . , Miss . , Ms . , Rev .
Any solution or regex statement which can consider all of these salutations?
I tried this:
name.replaceAll("\\s{2,}", " ").replaceFirst("(?i)(Mr . )", "").replaceFirst("(?i)(Mr |Mr. )", "").trim()
It is working, but for name like amra khan
, it is removing mr
.
答案1
得分: 2
你可以使用
name = name.replaceAll("\\s{2,}", " ").replaceFirst("(?i)^\\s*(?:M(?:iss|rs?|s)|Dr|Rev)\\b[\\s.]*", "").trim();
详细的正则表达式模式如下:
(?i)
- 忽略大小写选项^
- 字符串开始\s*
- 0个或多个空白字符(?:M(?:iss|rs?|s)|Dr|Rev)
-M
后面跟着iss
、r
、rs
、s
,或者Dr
或Rev
(你可以在|
后面添加更多选项)\b
- 单词边界[\s.]*
- 0个或多个空白字符或点号。
参见正则表达式演示。
英文:
You may use
name = name.replaceAll("\\s{2,}", " ").replaceFirst("(?i)^\\s*(?:M(?:iss|rs?|s)|Dr|Rev)\\b[\\s.]*", "").trim();
See the regex demo
Pattern details
(?i)
- case ignoring option^
- start of string\s*
- 0+ whitespaces(?:M(?:iss|rs?|s)|Dr|Rev)
-M
followed withiss
,r
,rs
,s
, orDr
orRev
(you may add more after|
here)\b
- word boundary[\s.]*
- 0 or more whitespaces or dots.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论