簡體   English   中英

正則表達式替換w匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM