如何用下划线替换大写?

TiG*_*Ger 9 python regex string replace uppercase

我是Python的新手,我试图将单词中的所有大写字母替换为下划线,例如:

ThisIsAGoodExample
Run Code Online (Sandbox Code Playgroud)

应该成为

this_is_a_good_example
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一目标的任何想法/提示/链接/教程?

Kri*_*ins 13

这是一种正则表达式:

import re
example = "ThisIsAGoodExample"
print re.sub( '(?<!^)(?=[A-Z])', '_', example ).lower()
Run Code Online (Sandbox Code Playgroud)

这就是说,"在字符串中查找不在行开头之前的点,然后是大写字符,并用下划线替换.然后我们降低()大小写整个事情.

  • 这错过了很多大写字母.例如,它不能处理我的名字拼写"Éric".IIRC,`\ p {Lu}`是合适的模式,而不是`[AZ]`. (2认同)

xub*_*tix 9

import re
"_".join(l.lower() for l in re.findall('[A-Z][^A-Z]*', 'ThisIsAGoodExample'))
Run Code Online (Sandbox Code Playgroud)

编辑:实际上,这只有在第一个字母是大写的情况下才有效.否则这(取自这里)做正确的事情:

def convert(name):
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
Run Code Online (Sandbox Code Playgroud)


Kir*_*ser 5

这将生成一个项目列表,其中每个项目为"_",如果字符最初为大写字母,则后跟小写字母,如果不是,则为字符本身.然后它将它们连接成一个字符串并删除可能已由该进程添加的任何前导下划线:

print ''.join('_' + char.lower() if char.isupper() else char
              for char in inputstring).lstrip('_')
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您尚未指定如何处理字符串中已存在的下划线.我不知道如何处理这个案子所以我受到了惩罚.


Kev*_*imm 0

解析你的字符串,每次遇到大写字母时,在它前面插入一个_,然后将找到的字符切换为小写