如何在Java中删除字符串中的所有前缀敬语?

huangapple go评论81阅读模式
英文:

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后面跟着issrrss,或者DrRev(你可以在|后面添加更多选项)
  • \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 with iss, r, rs, s, or Dr or Rev (you may add more after | here)
  • \b - word boundary
  • [\s.]* - 0 or more whitespaces or dots.

huangapple
  • 本文由 发表于 2020年4月7日 18:59:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/61078462.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定