在许多编程语言中,如下
找到 foo([a-z]+)bar
并替换为 GOO\U\1GAR
将导致整个匹配项变为大写。我似乎无法在 python 中找到等效项;它存在吗?
原文由 Jordan Reiter 发布,翻译遵循 CC BY-SA 4.0 许可协议
在许多编程语言中,如下
找到 foo([a-z]+)bar
并替换为 GOO\U\1GAR
将导致整个匹配项变为大写。我似乎无法在 python 中找到等效项;它存在吗?
原文由 Jordan Reiter 发布,翻译遵循 CC BY-SA 4.0 许可协议
不幸的是,这种 \U\1 语法在 Python 中永远无法工作,因为字符串文字中的 \U 表示 32 位十六进制 转义序列 的开头。例如, "\U0001f4a9" == "💩"
。
然而,通过使用替换 _函数_,可以很容易地替代 Perl 的大小写转换转义。在 re.sub(pattern, repl, string, count=0, flags=0)
替换 repl
通常是一个字符串,但它也可以是一个可调用的。如果它是可调用的, 它会传递 Match 对象并且必须返回要使用的替换字符串。
因此,对于问题中给出的示例,这是可能的:
>>> string = "fooquuxbar"
>>> pattern = "foo([a-z]+)bar"
>>> re.sub(pattern, lambda m: f"GOO{m.group(1).upper()}GAR", string)
'GOOQUUXGAR'
以下是可能对类似大小写转换有用的其他字符串方法表。
修改器描述例子Python 可调用使用\U大写富酒吧 –> 富酒吧str.upper
\L小写foo BAR –> foo 栏str.lower
或 str.casefold
\我首字母大写foo 栏 –> Foo 栏str.title
\F第一资本foo BAR –> Foo 栏str.capitalize
原文由 wim 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答885 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
您可以将函数传递给
re.sub()
这将允许您执行此操作,这是一个示例:以及使用它的示例: