这里的第一次海报。我不擅长编程,但我正在努力。我已经获得了Python类的作业,我的任务是:
您需要考虑从键盘读入的行中搜索的三个单词。这三个词是你的名字,你最喜欢的颜色,也是你最喜欢的季节。
您的程序会提示用户输入一行,然后您将使用正则表达式搜索每行的单词。即使案例与您通常使用的案例混合或不同,您也希望找到这些词。
如果你找到你的名字,你应该打印出输出,“嘿,我的名字是NAME。”用NAME替换了所输入的内容(包括案例)。
如果你找到自己喜欢的颜色,你应该打印出输出,“哦,我喜欢颜色颜色。”将COLOR替换为所输入的内容(包括大小写)。
如果你找到自己喜欢的季节,你应该打印输出,“我确实认为季节是最好的季节。”将SEASON替换为所输入的内容(包括案例)。
这是我迄今为止所尝试过的:
import re
input = raw_input("Please input a sentence stating your name, your favorite color, and your favorite season: ")
x = "My name is DoTNeT."
name = input.split(",")[1]
z = re.search(name, x)
if z == None:
pass
else:
print x
我认为我在这里有正确的想法...我知道它不对,我只是感到沮丧,因为我还在学习Python,随之而来的是学习如何谈论它。我不知道如何准确地说出我为什么错了或者我需要如何解决它。我不是在寻找一个只为我答复的人,我想了解它。一切都有帮助。感谢。
答案 0 :(得分:0)
正如您所提到的,您只需要建议而非实际代码(我喜欢它)。以下是您可能会发现有用的一些内容:
使用string.split()
将字符串拆分为单词(Tutorial link)
re.search()
检查子字符串,re.sub()
替换字符串。
例如:your_word
会将字符串中的your_word
检查为:
>>> import re
>>> if re.search('hello', 'yes hello world'):
... print 'match'
...
match # prints match as "hello" is present in "yes hello world"
请阅读:Regular Expression Syntax文件。特别re.IGNORECASE用于不区分大小写的搜索。
答案 1 :(得分:0)
您可以使用圆括号和管道来设置与列表中的任何单词匹配的模式。您可以使用它来匹配季节和颜色:
seasons = "(winter|spring|summer|fall)"
colors = "(red|white|black|yellow|pink|brown|green|blue|purple|cyan)"
正如已经提到的那样,您可以使用标志re.IGNORECASE
将模式与所写的大小写进行匹配。例如,对于季节:
match = re.search("(winter|spring|summer|fall)", "i like SumMer")
print match.group()
# SumMer
在这里,我正在使用i like SumMer
字符串上的季节模式进行search
。由于存在匹配项,因此它返回一个MatchObject
,而我正在对其进行group
来获得我的组匹配项,即SumMer
。如果没有匹配项,则match
将是None
。
如果您不知道我所说的组的含义,简单地说,当您的模式中带有括号时,您将创建一个新的组。 0
组是您的完整配对。尽管如果您添加?:
,则可以拥有non-capturing groups。以以下示例为例,其中只有最后一组没有捕获:
match = re.search("(hello|hi), my name is (paul|henri). (?:bye|goodbye)", "Hi, my name is HENRI. GoodBye", re.IGNORECASE)
match.group(0) # Hi, my name is HENRI
match.group(1) # Hi
match.group(2) # HENRI
match.group(3) # ERROR!
match.groups() # ('Hi', 'HENRI')
现在,我们如何匹配名称?这很棘手,您要么拥有所有可能名称的列表,要么认为名称始终位于I'm
,I am
或My name is
之类的句子之后。我要选择第二个,并创建一个像这样的模式:
names = "(?:my name is|i am|i'm) ([A-Za-z-]+)"
我有一个非捕获组,上面刚刚提到了这些短语,然后创建了一组[A-Za-z-]+
。让我们分解一下(您可以查看docs以获得更多详细信息和更多模式):
[]
-匹配一组字符或范围A-Z
-匹配所有大写字母a-z
-匹配所有小写字母-
-匹配-
文字[A-Za-z-]
-匹配所有字母,大写和小写以及-
+
-匹配重复了1个或更多的上一个令牌[A-Za-z-]+
-匹配1个或多个字母或-
所以现在我们尝试匹配所有模式并将其组合在一起:
import re
names = "(?:my name is|i am|i'm) ([A-Za-z-]+)"
colors = "(red|white|black|yellow|pink|brown|green|blue|purple|cyan)"
seasons = "(winter|spring|summer|fall)"
sentence = raw_input("Please input a sentence stating your name, your favorite color, and your favorite season: ")
# Check for name
name = re.search(names, sentence, re.IGNORECASE)
if name:
print("Hey, my name is {}".format(name.group(1)))
# Check for color
color = re.search(colors, sentence, re.IGNORECASE)
if color:
print("Oh, I like the color {}".format(color.group()))
# Check for season
season = re.search(seasons, sentence, re.IGNORECASE)
if season:
print("I do think {} is the best season".format(season.group()))
运行时:
>>> Please input a sentence stating your name, your favorite color, and your favorite season: I'm Jon Snow. Winter is coming along with the WHITE WALKERS.
Hey, my name is Jon
Oh, I like the color WHITE
I do think Winter is the best season
如有任何疑问,请不要犹豫。编码很有趣,不要失去希望:)