正则表达式从文本Java验证意大利语名称

时间:2018-10-29 09:28:56

标签: java regex

所以我想验证意大利语名称。他们可以是像安吉洛·奥雷斯特·阿德里萨诺,费鲁奇欧·雷斯塔,安东尼奥·德·法尔奇,塔玛拉·多纳,吉安弗朗科·安杰洛或克莱里奥·德奥诺弗里奥这样的人。有人可以帮我吗。 我的方法是:[A-Z] [a-z] {1,13} [A-Z] [a-z] {1,13}([A-Z] [a-z] {1,13})?

它可以与Angelo Oreste Adrisano之类的名字一起使用,但我想也包括Clelia D'Onofrio和TamaraDonà之类的名字。

问题与NER(命名实体识别)无关!换句话说,对于我来说可以接受,例如“ Scuola Di Nasia”,这不是真名...

1 个答案:

答案 0 :(得分:1)

Regex是一个盲目的工具。它并不真正了解上下文。对于 [a-zA-Z] * 的正则​​表达式都有效:

  • 纽约
  • 柯基犬
  • 投掷
  • 鸡蛋
  • 快速

这是一个非常简单的正则表达式,但请注意,它根本无法区分名称,名词,动词和形容词。

据我所知,除非您在字符串中硬编码有效名称(根据人类的定义),否则所有正则表达式都只会拾取与您编写的字符相匹配的所有字符。届时,您也可以自己列出有效名称。

您编写的正则表达式将匹配两到三个单词的任何序列,每个单词以A-Z的大写字母开头,然后是a-z的十三个小写字母开头。仅此描述并不排除诸如“ Adfnwj Jsdako Mvdso”之类的东西,据我所知,正则表达式不能简单地做到这一点。