Python Regex-用大写字母替换每个匹配项

Python Regex-用大写字母替换每个匹配项,python,regex,Python,Regex,如何在每个匹配的事件中使用大写字母?每个两个字母组合,第一个大写字母,第二个小写字母,由空格或字符串的开头/结尾包围 re.sub('( |^)[A-Z][a-z]($| )', lambda m: m.group(0).upper(), loc) 配合 loc = ' Ny' # or ' Ny ' or 'Ny ' 但不是 loc = ' Ny Us' 我希望结果是NY和NY-US 我正在使用Python 2.7。您可以将最后一个组转换为前瞻: re.sub('( |^)[A-Z][

如何在每个匹配的事件中使用大写字母?每个两个字母组合,第一个大写字母,第二个小写字母,由空格或字符串的开头/结尾包围

re.sub('( |^)[A-Z][a-z]($| )', lambda m: m.group(0).upper(), loc) 
配合

loc = ' Ny' # or ' Ny ' or 'Ny '
但不是

loc = ' Ny Us'
我希望结果是
NY
NY-US


我正在使用Python 2.7。

您可以将最后一个组转换为前瞻:

re.sub('( |^)[A-Z][a-z](?=$| )', lambda m: m.group(0).upper(), loc)
                       ^^^^^^^

关键是允许正则表达式引擎匹配上一次迭代中匹配的最后一个字母后的空格

下面是一个基于lookarounds的替代正则表达式,您可以将其用于相同的任务:

r'(?<!\S)[A-Z][a-z](?!\S)'

r'(?您可以将最后一组转换为前瞻:

re.sub('( |^)[A-Z][a-z](?=$| )', lambda m: m.group(0).upper(), loc)
                       ^^^^^^^

关键是允许正则表达式引擎匹配上一次迭代中匹配的最后一个字母后的空格

下面是一个基于lookarounds的替代正则表达式,您可以将其用于相同的任务:

r'(?<!\S)[A-Z][a-z](?!\S)'

r'(?当然,另一个建议是使用单词边界-
r'\b[A-Z][A-Z]\b'
。但这会满足一些不同的要求。当然,另一个建议是使用单词边界-
r'\b[A-Z][A-Z]\b'
。但这会满足一些不同的要求。