python - 正则表达式 - 用大写字母替换每个匹配项

标签 python regex

如何将每个匹配项大写?每两个字母组合,第一个大写,第二个小写,它们被空格或字符串的开头/结尾包围。

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

一起工作

loc = ' Ny' # or ' Ny ' or 'Ny '

但不是

loc = ' Ny Us'

我希望结果是 NYNY 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/

相关文章:

正则表达式:如果有两个字符,则两个字符之间第一次出现

php - 如何用破折号替换字符串中的空格 - php

java - 用于在 JavaScript 中查找 Java 格式字符串的正则表达式

python - Django - 从单独的应用程序导入 View

python - 使用 Python 水平扩展或分片 Python-RQ 或 Redis

python - Python 中的嵌套 Lambda

python - 如何填充列表中的值并将其转换为数据帧?

python - 正则表达式捕捉 2 个引号之间的部分

regex - 如何编写正则表达式来匹配 '012356789'(无 4)

php - 如何将双/多个字母替换为单个字母?