Python 我如何加上“_&引用;在每个大写字母后面加一个字符串?

Python 我如何加上“_&引用;在每个大写字母后面加一个字符串?,python,string,Python,String,我想在字符串中的每个大写字母后面加下划线“389;”。 例如,如果字符串是“StackOverFlow”,我想将其设为这个“\u Stack\u Over\u Flow”一个简单的,用于和isupper: In [1722]: s = "StackOverFlow" In [1740]: l = [] In [1741]: for c,i in enumerate(list(s)): ...: if i.isupper(): ...:

我想在字符串中的每个大写字母后面加下划线“389;”。
例如,如果字符串是“StackOverFlow”,我想将其设为这个“\u Stack\u Over\u Flow”

一个简单的
,用于
isupper

In [1722]: s = "StackOverFlow"

In [1740]: l = []

In [1741]: for c,i in enumerate(list(s)):
      ...:     if i.isupper():
      ...:         l.append('_' + i)
      ...:     else:
      ...:         l.append(i)
      ...: 
In [1747]: s = ''.join(l)

In [1748]: s
Out[1748]: '_Stack_Over_Flow'
列表理解

s = ''.join(['_' + i if i.isupper() else i for c,i in enumerate(list(s))])

您可以使用正则表达式:

import re

s = "StackOverFlow"
result = re.sub(r"([A-Z])", r"_\1", s)

嗯,不多,但这里有一个简单的方法

string = "StackOverFlow"
newString = []
for letters in string:
    if letters.isupper():
        letters = "_"+letters
    newString.append(letters)
print(''.join(newString))
输出:

_Stack_Over_Flow

这是一个函数,它完全符合您在问题中提出的要求


def adding_beforeCapitalLetters(n):
    newstring=''
    for i in range(0,len(n)):
        if (n[i]>='A' and n[i]<='Z'):
            newstring = newstring + '_' + n[i]
        else:
            newstring = newstring + n[i];
    return newstring;
    


print(adding_beforeCapitalLetters("StackOverFlow"));


在Capitalletter之前添加def(n):
新闻字符串=“”
对于范围(0,len(n))中的i:

如果(n[i]>='A'和n[i]在之后或之前?请澄清Hi Rahul,请展示您的尝试。提醒一下:通常,您不会编辑问题以添加解决方案(如果问题尚未关闭,如果与现有答案存在显著差异,我会鼓励您添加自己的答案);它不鼓励人们对各种答案进行评估/投票。我已将您的问题回滚到您添加答案之前。至于感谢,请随时投票选出任何有帮助的答案,而不仅仅是接受一个。如果您有比感谢更详细的内容,请随时对答案发表评论这激发了这样的想法。当大写字母出现两次时,这一点就被打破了。请使用
s='SoSoS'
@ShadowRanger Fixed尝试一下。请检查。为了好玩,您还可以使用前瞻断言来消除显式捕获和重新插入字符的需要:
result=re.sub(r“(?=[a-Z]),r“\us)
只需添加
?=
,删除
\1
。这也意味着更快(可能是通过避免提取捕获组,并使替换字符串非动态);对于
s='s'*10
,避免捕获组将运行时缩短约80%(6.8µs w/捕获,1.43µs不捕获,使用预编译/绑定正则表达式的
sub
方法来最小化其他开销来源,例如
ssub=re.compile(r“(?=[a-Z])”)。sub
一次,
res=ssub(''s'))
。非常感谢大家,这真的很有帮助..我想在不导入任何模块的情况下解决这个问题。在使用了所有人的输入后,以下是完整的解决方案:word=“StackOverFlow”new\u word=[]if word.islower():print(word)else:for letter in word:if letter.isupper():letter=“”+字母new-word.append(字母)else:new-word.append(字母)new-word=''.join(new-word.lstrip(“”)print(new-word)