猿问

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

我正在 python 上做练习,但我的正则表达式是错误的我希望有人可以帮助我,练习是这样的:


填写代码以检查传递的文本是否看起来像标准句子,即它以大写字母开头,后跟至少一些小写字母或空格,并以句号、问号或感叹号结尾


import re


def check_sentence(text):       

   result = re.search(r"^[A-Z]+[a-z]+[\s]+[a-z]+[\.!\?]$", 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


回首忆惘然
浏览 152回答 5
5回答

慕村225694

您当前的正则表达式不起作用,因为它试图寻找^[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]+:一个或多个大写字母/小写字母/空格[\.!\?]$: 字符串末尾有一个标点符号

翻过高山走不出你

我建议以下正则表达式禁止连续空格和标点符号之前的空格/^[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!

潇湘沐

这应该有效    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

慕娘9325324

从问题是问它以大写字母开头,所以我们使用^[A-Z].后面至少跟着一些小写字母或空格,以便我们可以使用[a-z\s]+。并以句号、问号或感叹号结尾。所以我们可以使用[\.\?!]$. \之前的and.称为?“转义字符”,它用于转义.and?因为它们都是正则表达式操作的一部分。好了,你的问题的答案是result = re.search(r"^[A-Z][a-z\s]+[\.\?!]$", text)。

万千封印

顺便说一句,这也有效。 re.search(r"^[A-Z][a-z\s].*[.?!]$", text)
随时随地看视频慕课网APP

相关分类

Python
我要回答