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()}')
返回“”。加入(个字符)
您可以使用nicepython3
方法和:
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