如何将每个匹配项大写?每两个字母组合,第一个大写,第二个小写,它们被空格或字符串的开头/结尾包围。
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)
^^^^^^^
参见 Python demo .
重点是允许正则表达式引擎匹配上一次迭代中匹配的最后一个字母之后的空格。
这是一个基于环视的替代正则表达式,您可以将其用于同一任务:
r'(?<!\S)[A-Z][a-z](?!\S)'
参见 this regex demo . (?<!\S)
negative lookbehind 需要字符串开头的位置或前面有空格的位置。 (?!\S)
否定先行要求字符串位置的结尾或紧靠当前位置右侧的空格。
关于python - 正则表达式 - 用大写字母替换每个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44684961/