我需要匹配一个人的姓氏,以便将值解析到我的数据表中。在大多数情况下,它可以工作,但是某些实例与预期的不匹配。需要更改什么才能获得我想要的比赛?
这是我用来测试模式的当前代码段。
pattern = re.compile(r'(?i)\w+\'\w+|\w+\-\w+|^(?:saint)+?(?:st)+?(?:DA)+?(?:DE LA)+?(?:DE las)+?(?:DE LOS)+?(?:DE)+?(?:DEL)+?(?:DI)+?(?:DU)+?(?:LA)+?(?:MAC)+?(?:MC)+?(?:SANTA)+?(?:SAN)+?(?:STE)+?(?:VANDER)+?(?:VAN DER)+?(?:VAN)+?(?:VON)+?\s?[a-z\'\-\,\.]+?[a-zA-Z\'.,\-]+(?!MRS)(?!\bJR\b)(?!\bSR\b)(?!\bII\b)(?!\bIII\b)(?!\bIV\b)(?!\bMR\b)(?!\bMRS\b)(?!\bMS\b)|^[a-z]{1,3}\s?[a-z\'\-\,\.]+|^\w+?')
text = "Van Der White"
result = pattern.search(text)
try:
print(result.group())
except:
print(result)
虽然这种模式在大多数情况下都可以匹配,例如
"La Grone"
"Mac Millan"
"Del Rio"
在此类情况下无法匹配。
"Van Der White"
"De La Rosa"
"Saint Cloud"
在我的数据表中,名称遵循“后缀最后一个前缀”的格式,有时在字符串中包含多个人,因此我正在使用我的模式,因此我决定使用正则表达式而不是字符串拆分,因为我并不总是知道会有多少个名称出现在我正在使用的当前字符串上。