为了账号安全,请及时绑定邮箱和手机立即绑定

这个 python 练习的正确正则表达式是什么?

这个 python 练习的正确正则表达式是什么?

回首忆惘然 2023-09-19 17:32:15
我正在 python 上做练习,但我的正则表达式是错误的我希望有人可以帮助我,练习是这样的:填写代码以检查传递的文本是否看起来像标准句子,即它以大写字母开头,后跟至少一些小写字母或空格,并以句号、问号或感叹号结尾import redef check_sentence(text):          result = re.search(r"^[A-Z]+[a-z]+[\s]+[a-z]+[\.!\?]$", text)   return result != Noneprint(check_sentence("Is this is a sentence?")) # Trueprint(check_sentence("is this is a sentence?")) # Falseprint(check_sentence("Hello")) # Falseprint(check_sentence("1-2-3-GO!")) # Falseprint(check_sentence("A star is born.")) # True
查看完整描述

5 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

您当前的正则表达式不起作用,因为它试图寻找

^[A-Z]+[a-z]+[\s]+[a-z]+[\.!\?]$https://regex101.com/r/b96zXT/2

  • ^[A-Z]+:字符串开头的一个或多个大写字母

  • [a-z]+:大写字母后的一个或多个小写字母

  • [\s]+:小写字母后有一个或多个空格

  • [a-z]+: 空格后的一个或多个小写字母

  • [\.!\?]+$:第二串小写字母后的一个或多个标点符号(.!或),然后字符串结束。?

你真正想做的事情:

^[A-Z][A-Za-z\s]+[\.!\?]$ https://regex101.com/r/r3CAdh/2

  • ^[A-Z]:字符串开头恰好有一个大写字母

  • [A-Za-z\s]+:一个或多个大写字母/小写字母/空格

  • [\.!\?]$: 字符串末尾有一个标点符号


查看完整回答
反对 回复 2023-09-19
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

我建议以下正则表达式禁止连续空格和标点符号之前的空格

/^[A-Z][a-z]*(\s[a-z]+)*[\.!\?]$/

解释

  • ^必须从输入字符串的开头开始

  • [A-Z][a-z]*第一个单词必须以大写字母开头,后跟任意数量的小写字母

  • (\s[a-z]+)*在第一个单词之后,可以有任意数量的附加单词(也可以是零)。每个单词前面必须有一个空格(您也可以只使用一个空格,而不是\s只允许空格但不允许制表符)并且至少包含一个小写字母

  • [\.!\?]$标点符号必须位于输入字符串的末尾。

例如,这将允许

This is a valid sentence.

但禁止类似的事情

This is not valid !
This  is not valid either!


查看完整回答
反对 回复 2023-09-19
?
潇湘沐

TA贡献1816条经验 获得超6个赞

这应该有效


    import re

    def check_sentence(text):

      result = re.search(r"^[A-Z][A-Za-z\s]*[\.\?!]$", text)

      return result != None


    print(check_sentence("Is this is a sentence?")) # True

    print(check_sentence("is this is a sentence?")) # False

    print(check_sentence("Hello")) # False

    print(check_sentence("1-2-3-GO!")) # False

    print(check_sentence("A star is born.")) # True


查看完整回答
反对 回复 2023-09-19
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

从问题是问

  • 它以大写字母开头,所以我们使用^[A-Z].

  • 后面至少跟着一些小写字母或空格,以便我们可以使用[a-z\s]+

  • 并以句号、问号或感叹号结尾。所以我们可以使用[\.\?!]$\之前的and.称为?“转义字符”,它用于转义.and?因为它们都是正则表达式操作的一部分。

好了,你的问题的答案是result = re.search(r"^[A-Z][a-z\s]+[\.\?!]$", text)


查看完整回答
反对 回复 2023-09-19
?
万千封印

TA贡献1891条经验 获得超3个赞

顺便说一句,这也有效。

 re.search(r"^[A-Z][a-z\s].*[.?!]$", text)


查看完整回答
反对 回复 2023-09-19
  • 5 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信