我正在尝试验证用户输入' a' | '一个'这将满足if语句。如果不满意,elif块将检查第二个单词是否是"关于"如果不是"关于",它将检查"任何人" ;。很遗憾'关于' &安培; "人"两个字母都以' a'开头。或者''所以我需要添加一个空间'在' a'结束后' an'允许正则表达式检测差异。
# Receive User input.
secrets = {}
secrets['text'] = request.GET.get('text')
regex_a = re.compile("(a|an)")
regex_about = re.compile('about')
regex_anyone = re.compile('anyone')
# Get second word from secrets[text]
secondword = secrets['text'].split()[1]
# If 2nd word is == 'a/an'
if regex_a.match(secondword):
return HttpResponse("Text was (a) or (an)")
# Else if 2nd word is == about
elif regex_about.match(secondword):
return HttpResponse("Second word was (about)")
elif regex_anyone.match(secondword):
return HttpResponse("Second word was (anyone)")
else:
return HttpResponse("Failed to interpret user input")
即使用户输入"关于"当前的正则表达式("(a|an)")
也会返回Text was (a) or (an)
或者"任何人"作为第二个词,这是预期的。
所以我还尝试了("(a\s|an\s)")
,当第二个单词的输入是' a'或者''。但是它会返回正确的响应' about' &安培; '人&#39 ;.这真令人困惑......
然后我也尝试了Failed to interpret user input
,它返回与之前测试相同的结果。
除了这三项测试之外,我还尝试了很多其他测试,但不会在这里列出,因为有很多测试。
答案 0 :(得分:5)
答案 1 :(得分:1)
您可以使用:
regex_a = re.compile("(a|an)$")
这样你告诉正则表达式字符串需要在那里结束匹配。
正则表达式("(a\s|an\s)")
永远不会起作用,因为它希望子字符串'a '
和'an '
匹配,问题在于split()
中的secondword = secrets['text'].split()[1]
返回空格修剪的字符串。
答案 2 :(得分:1)
import re
sentence = "I am about to finish my Engineering and become an Engineer and a responsible person."
re.findall(r'(a|an)\s', sentence)
额外的空格会将其视为单独的单词。
答案 3 :(得分:0)
使用re.match
:
pattern = "^(A|An)$|^((?!^A$|^An$)about)$|^((?!^((?!^A$|^An$)about)$)anyone)$"
m = re.match(pattern, secondword)
if m:
print(m.groups())
以下是此表达式的细分:
^(A|An)$
这与"A"
或"An"
相匹配。如果这不匹配,那么它会转到下一个案例。
^((?!^A$|^An$)about)$
匹配单词"about"
,但仅如果"A"
或"An"
不作为孤立单词出现。如果这不匹配,则转到下一个案例。
^((?!^((?!^A$|^An$)about)$)anyone)$
这与单词"anyone"
匹配,但仅当"about"
作为孤立单词(在没有"A"
和"An"
时)才会出现。
您可以测试正则表达式here。