我正在尝试提取并在校卡上显示姓名:
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”。
如何编辑我的正则表达式以包含此函数是否它还可以包含包含“,”的名称,同时还可以在没有“,”的情况下使用名称?
答案 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 :在没有发表评论的情况下下载工作答案毫无意义。