[英]Regex Replace w Match
我有“西密歇根州”,“北伊利諾伊州”之類的名稱,我需要將其更改為“ W Michigan”和“ N Illinois”。 以下是我所擁有的最接近的,但是失敗了,原因是說我匹配單詞“ Western Michigan”,它引發了一個錯誤,並說\\ 2是一個不匹配的組(\\ 3似乎返回了WI想要的)。 (這是python)
re.sub("^((S)outhern|(E)astern|(W)estern|(N)orthern)", r"\2", long_name)
您有5個捕獲組-但這已經被解釋了。 如果將其減少到1個捕獲組,則可以輕松獲得所需的內容,但這有點微妙。 首先,您使用“正向超前斷言”來確保您正在查看感興趣的“長詞”之一。 但是,斷言不匹配任何內容。 它只是限制了搜索。 然后,您可以捕獲后面的字母,並消耗掉其余的字母。 像這樣:
pat = r"""(?=Southern|Eastern|Western|Northern) # looking at one of these words
(.) # just capture the first character
(outhern|astern|estern|orthern) # and consume the rest"""
pat = re.compile(pat, re.VERBOSE)
pat.sub(r"\1", long_name)
除了傳遞替換模式,您還可以傳遞回調:
re.sub("^(?P<word>Southern|Eastern|Western|Northern)",
lambda match: match.group('word')[0],
'Northern Illinois')
正則表達式的分組是通過第n 個開放括號進行的:
# 12 3 4 5
re.sub("^((S)outhern|(E)astern|(W)estern|(N)orthern)", r"\2", long_name)
因此,如果第二組匹配,則為“ S”,如果第三組匹配,則為“ E”,依此類推。
要更正此問題,請匹配單詞並使用匹配單詞的第一個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.