0
我有一個正則表達式匹配的中間名,看起來像這樣:re.escape修改行爲
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 \ nBorn :\ nAkron,俄亥俄州\ nCollege:中 藝術\ nBachelor,凱尼恩學院,1998年
這種模式能正常工作,而中間名 '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是否安全使用的意思,它不會改變表達的行爲?在非字母數字字符之前添加反斜槓會導致它不匹配?
任何幫助,將不勝感激!
謝謝,長相好。 – WeaselFox
歡呼聲。我有一些錯誤,刷新頁面。 –