正则表达式用于提取学校卡中的名称

时间:2016-02-11 09:20:48

标签: java regex

我正在尝试提取并在校卡上显示姓名:

Jennifer Ng Si En
Female
Singaporean

Nanyang Polytechnic

Tel: 65523325
HP: 96655523
Email: igfdjh@edikfjh.sg

我知道一个真正的名称正则表达式是不可能的,因为它需要一个世界上所有名字的字典来真正提取名称。

所以这是我现在的正则表达式:

^(?!.*\b(Polytechnic|University|Institute|School|Faculty|Technology|Engineering)\b) *[A-Za-z][A-Za-z.]*(?: +[A-Za-z.]+){1,3} *$

在任何包含1到4个单词的短语中排除含有“理工学院,大学,学院,学校,学院,技术或工程”的短语,这些单词通常出现在学校卡上。< / p>

它可以成功地提取出名称“Jennifer Ng Si En”。但是,假设该名称包含“,”(例如:Ng Si En,Jennifer)

然后它将无法提取名称“Ng Si En,Jennifer”。

如何编辑我的正则表达式以包含此函数是否它还可以包含包含“,”的名称,同时还可以在没有“,”的情况下使用名称?

1 个答案:

答案 0 :(得分:2)

按照您的逻辑,将文字,添加到[A-Za-z.]个字符类:

^(?!.*\b(Polytechnic|University|Institute|School|Faculty|Technology|Engineering)\b) *[A-Za-z][A-Za-z.,]*(?: +[A-Za-z.,]+){1,3} *$
                                                                                                     ^               ^

请参阅regex demo

请注意,您可以使用[A-Za-z]\S*代替[A-Za-z][A-Za-z.,]*来匹配任何非空格符号,在字母后面出现零次或多次。

如果你想排除匹配的&#34;单词&#34;如Je,nnifer,请使用

^(?!.*\b(Polytechnic|University|Institute|School|Faculty|Technology|Engineering)\b) *[A-Za-z][A-Za-z.]*(?:,? +[A-Za-z.]+){1,3} *$
                                                                                                          ^^

,?匹配一个或零个逗号。请参阅another demo

不要忘记在Java字符串文字中使用双重转义。

@Downvoter :在没有发表评论的情况下下载工作答案毫无意义。