【问题标题】:Using re.match() to fix string capitalization使用 re.match() 修复字符串大小写
【发布时间】:2019-03-31 07:55:44
【问题描述】:

对于我试图在网站上尝试的特定问题,我没有得到所需的输出。问题来了:

假设使用 Caps Lock 键输入了一个单词 意外打开,如果:

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

编写一个应用上述规则的程序。如果规则 不能应用,程序应该保持单词不变。

我尝试过使用以下代码,但我不明白为什么它不能正常工作。

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)
Input:CAPS
Desired output: Caps
Current output: CAPS

Input:cAPS
Desired output: Caps
Current output: cAPS

Input:cAPSlOCK
Desired output:cAPSlOCK
Current output: cAPSlOCK

【问题讨论】:

  • 你的问题被否决了,因为你没有解释你想要你的代码做什么,也没有努力解释你当前的代码。请相应地编辑您的帖子。
  • 我根据您添加的问题定义稍微修改了答案中的正则表达式,使得以多个小写字母开头的单词不会被修改。

标签: python regex python-3.x


【解决方案1】:

第一个正则表达式: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2016-01-05
    • 1970-01-01
    • 2012-11-05
    • 2016-01-25
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多