这是我的任务的一部分中的模块,但是我正在尝试使用正则表达式字符串来接受句子而不是仅使用单个字符单词。我对python编程很新,并且已经为我的GCSE学习了大约一年,并希望得到一些帮助。
validateLoop = True
while validateLoop: #While loop used to loop back around if choice is invalid
shift = input("Enter a sentence: ").lower() #Takes input for a sentence
if not (re.match('[a-z]+$', shift)): #This is where i'm stuck
print("Invalid input message, only include letters a-z with no other characters")
print("Any upper case letters will be converted into lowercase")
else:
validateLoop = False
答案 0 :(得分:1)
if not (re.match(r"^[A-Za-z]*$", shift)):
这将从句子^
方括号只会找到其中的字符[ ]
A-Za-z
指定要查找的字符
*
就是一切
和$
匹配字符串的结尾
修改强>
如果要包含空格,请使用\s
if not (re.match(r"^[A-Za-z\s]*$", shift)):
答案 1 :(得分:1)
怎么样:
regexp = re.compile(r'^[a-zA-Z\s!-~]+$')
regexp.match(shift)
!-~
位应该可以得到标点符号。 \s
为你提供了空间。
r
前缀使字符串成为原始字符串。尝试在正则表达式中使用原始字符串。
答案 2 :(得分:1)
也许这会更好用吗?
if not (re.match('^[a-z0-9`\'\",/;:\(\)\[\]\$\&\s]+[\.\?!]$', shift)):
它保证"句子"以句号,问号或感叹号结束。
这可以变得更聪明,因为它会遗漏一些有效的句子,例如句子末尾有引号(例如 Cassius说,"错误,亲爱的布鲁图斯,不是我们的明星,而是我们自己,我们是下属。" ),但我认为它涵盖了你的需求。
答案 3 :(得分:0)
按以下步骤修改正则表达式。有关您可以使用的构建基块,请参阅Python regex syntax和regular expression basics。
(并非所有项目都适用于您,具体取决于您的任务细节和详细说明)
除了字母外,每个字符都可以是一个空格;也可以有大写字母(为简单起见,也允许它们在任何位置 - 无论如何都有各种缩写);
第一个字母为大写字母,最后一个字母为句号,问号或感叹号;
在每个单词的末尾,即在一个字母之后和一个空格之前,可以有标点符号;然而,它们不能是任何句子结尾的标记;
省略号可以是\u2026
(...)或三个连续点。它可以在单词和句子的末尾(我不确定他们是否在英语中添加了一个额外的点);
a"点缀"缩写是一个或多个字母后跟单个点,没有任何空格。另请注意,如果这是在句子的末尾,他们不会添加额外的点。此时,您可能需要将此构造存储在单独的变量中,并将其插入主表达式的相关部分中;
直接演讲或对话标点符号可能不是您的任务的一部分。但如果是,则需要使用子表达式来检测这样的构造作为一个整体。