我有一个正则表达式来匹配看起来像这样的中间名:
first_name = 'Matthew'
last_name = 'Walsh'
for char in first_name:
new_first_name+='(' + char.lower() + '|' + char.upper() + ')'
for char in last_name:
new_last_name+='(' + char.lower() + '|' + char.upper() + ')'
middle_name_regex_str = "\b?((" + new_first_name + " (?P<middle_name1>[A-Z][^ ]?[a-z]* )?" + new_last_name + ")|(" + new_last_name + " (?P<middle_name2>[A-Z][^ ]?[a-z]* )?" + new_first_name + "))"
这是它适用的模式:
MATTHEW B. WALSH, DMD\n出生:\n俄亥俄州阿克伦\n大学:\n1998 年,肯扬学院文学学士
对于这种模式,它可以正常工作,并且与中间名“B”匹配。
但是我想安全起见并转义名字和姓氏,但是当我添加re.escape
它时失败:
middle_name_regex_str = "\b?((" + re.escape(new_first_name) + " (?P<middle_name1>[A-Z][^ ]?[a-z]* )?" + re.escape(new_last_name) + ")|(" + re.escape(new_last_name) + " (?P<middle_name2>[A-Z][^ ]?[a-z]* )?" + re.escape(new_first_name) + "))"
现在正则表达式不正确匹配:
regex = re.compile(middle_name_regex_str)
regex.search('MATTHEW B. WALSH, D.M.D.\nBorn:\nAkron, Ohio\nCollege:\nBachelor of Arts, Kenyon College, 1998')
这什么都不返回。
从不改变表达式行为的意义上说, re.escape 不应该安全使用吗?在非字母数字字符之前添加反斜杠会导致它不匹配怎么办?
任何帮助,将不胜感激!