使用re.match()修复字符串大写

时间:2019-03-31 07:55:44

标签: python regex python-3.x

对于尝试在网站上尝试解决的特定问题,我没有获得期望的输出。这是问题所在:

  

让我们考虑使用Caps Lock键输入了一个单词   意外打开,如果:

     

它只包含大写字母;或除以下所有字母   第一个是大写的。在这种情况下,我们应该自动   更改所有字母的大小写。例如,字母的大小写   应该更改形式单词“ hELLO”,“ HTTP”,“ z”。

     

编写一个应用上述规则的程序。如果规则   无法应用,程序应保持原样。

我尝试使用以下代码,但我不明白为什么它不起作用,我认为应该如此。

echo "√" | iconv -f UTF-8 | tr '√' 'REPLACED' | ed -s /report.txt

sed -i 's/√/REPLACED/g' /report.txt

perl -pi -e 's/√/REPLACED/g' /report.txt
import re
word = input()
exp = r'[a-z]+[A-Z]+'
exp2 = r'[A-Z]+'
if bool(re.match(word, exp)) or bool(re.match(word, exp2)):
    print(word[0].upper() + word[1:].lower())
else:
    print(word)

1 个答案:

答案 0 :(得分:3)

第一个正则表达式:r'[a-z]+[A-Z]+'匹配以一个或多个小写字母开头,然后是一个或多个大写字母开头的字符串。

第二个正则表达式r'[A-Z]+'与以一个或多个大写字母开头的字符串匹配。

您可以将它们组合为:r'[a-z]?[A-Z]+',它匹配以0或1个小写字母开头,然后是一个或多个大写字母的字符串。

第二,调用re.match()时参数的顺序错误。第一个参数应该是正则表达式,第二个参数应该是字符串:re.match(exp,word)

有效的实现方式:

import re

word = input()
exp = r'[a-z]?[A-Z]+'
if bool(re.match(exp,word)):
    print(word[0].upper() + word[1:].lower())
else:
    print(word)

演示:https://repl.it/@glhr/55438600