Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找字符串上的大写字母并替换它_Python_Python 3.x_String - Fatal编程技术网

Python 查找字符串上的大写字母并替换它

Python 查找字符串上的大写字母并替换它,python,python-3.x,string,Python,Python 3.x,String,这是我的代码: def cap_space(txt): e = txt upper = "WLMFSC" letters = [each for each in e if each in upper] a = ''.join(letters) b = a.lower() c = txt.replace(a,' '+b) return c 我创建了谁来查找给定字符串上的大写字母latters,并将其替换为空格和后者的小写

这是我的代码:

def cap_space(txt):
    e = txt
    upper = "WLMFSC"
    letters = [each for each in e if each in upper]
    a = ''.join(letters)
    b = a.lower()
    c = txt.replace(a,' '+b)
    return c
我创建了谁来查找给定字符串上的大写字母latters,并将其替换为空格和后者的小写字母

输入示例:

print(cap_space('helloWorld!'))
print(cap_space('iLoveMyFriend'))
print(cap_space('iLikeSwimming'))
print(cap_space('takeCare'))
输出应该是什么样的:

hello world!
i love my friend
take care
i like swimming
我得到的输出是:

hello world!
iLoveMyFriend
iLikeSwimming
take care

这里的问题是,如果给定字符串中只有一个大写字母,那么只应用条件。出于某种原因,我如何改进它,使其应用于给定字符串中的每个大写字母?

作为一个regex上瘾者,我可以提供以下解决方案,该解决方案依赖于带有适当正则表达式模式的
re.findall

def cap_space(txt):
parts=re.findall(r'^[a-z]+|[a-z][a-z]*[^\w\s]?',txt)
输出=“”.join(parts).lower()
返回输出
inp=['helloWorld!'、'iLoveMyFriend'、'iLikeSwimming'、'akeCare']
输出=[inp中x的cap_空间(x)]
打印(inp)
打印(输出)
这张照片是:

['helloWorld!', 'iLoveMyFriend', 'iLikeSwimming', 'akeCare']
['hello world!', 'i love my friend', 'i like swimming', 'ake care']
下面是对使用的正则表达式模式的解释:

^[a-z]+从字符串的最开始匹配一个全小写单词
|或
[A-Z]匹配前导大写字母
[a-z]*后跟零个或多个小写字母
[^\w\s]?后跟可选的“符号”(此处定义为任何非单词,
非空白字符)

一种简单而粗糙的方法。它可能并不有效,但更容易理解

def cap_空格(句子):
字符=[]
对于句子中的字符:
如果character.islower():
字符。追加(字符)
其他:
characters.append(f'{character.lower()}')
返回“”。加入(个字符)

您可以使用nice
python3
方法和:


a
是所有匹配的大写字母组合成一个字符串。当您尝试将它们替换为
txt.replace(a),+b)
时,仅当
txt中所有匹配大写字母都是连续的,或者只有一个匹配时,它才会匹配
str.replace()
匹配并替换整个sewarch字符串,而不是其中的任何字符

将所有匹配项合并到一个字符串中是行不通的。只需循环查看
txt
,检查每个字符是否匹配

def cap_space(txt):
    result = ''
    upper = "WLMFSC"
    for c in txt:
        if c in upper:
            result += ' ' + c.lower()
        else:
            result += c
    return result
def cap_space(txt):
    result = ''
    upper = "WLMFSC"
    for c in txt:
        if c in upper:
            result += ' ' + c.lower()
        else:
            result += c
    return result