在Python中分析字符串输入直到达到某个字母
我需要帮助来写程序的某个部分。这个程序的想法是,用户输入一堆乱七八糟的文字,程序会读取这些文字,直到遇到一个“!”(感叹号)。比如说:
input("Type something: ")
用户输入:wolfdo65gtornado!salmontiger223
如果我让程序打印这个输入,它应该只打印 wolfdo65gtornado
,一旦遇到“!”就停止,后面的内容就不管了。程序的其他部分是分析和统计字母,但那些我已经会了。我只需要帮助处理第一部分。我一直在翻书,但似乎缺少了一些东西。
我在想,也许可以用一个 for
循环,然后对它设置一些限制,但我不知道怎么让程序分析输入的随机字符串,找到特定的字符,然后把后面的内容去掉。
如果你能帮我,我会非常感激。谢谢!
8 个回答
8
你需要用到 itertools.takewhile()
这个功能。
>>> s = "wolfdo65gtornado!salmontiger223"
>>> '-'.join(itertools.takewhile(lambda x: x != '!', s))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'
>>> s = "wolfdo65gtornado!salmontiger223!cvhegjkh54bgve8r7tg"
>>> i = iter(s)
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'w-o-l-f-d-o-6-5-g-t-o-r-n-a-d-o'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
's-a-l-m-o-n-t-i-g-e-r-2-2-3'
>>> '-'.join(itertools.takewhile(lambda x: x != '!', i))
'c-v-h-e-g-j-k-h-5-4-b-g-v-e-8-r-7-t-g'
19
>>> s = "wolfdo65gtornado!salmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornado'
>>> s = "wolfdo65gtornadosalmontiger223"
>>> s.split('!')[0]
'wolfdo65gtornadosalmontiger223'
s = "something!something"
if "!" in s:
print "there is a '!' character in the context"
else:
print "blah, you aren't using it right :("
如果它没有遇到一个!字符,它就会把整个文本都抓取过来。如果你想在没有匹配到任何!的时候输出一个错误信息,你可以这样做:
71
内置的 str.partition()
方法可以帮你完成这个任务。跟 str.split()
不同的是,它不会把字符串的其余部分切成多个部分。
text = raw_input("Type something:")
left_text = text.partition("!")[0]
解释
str.partition()
会返回一个包含三个部分的元组:字符串的开头、分隔符和结尾。在这个例子中,我们只需要第一个部分,所以可以用 [0]
来获取它。例如:
"wolfdo65gtornado!salmontiger223".partition("!")
返回
('wolfdo65gtornado', '!', 'salmontiger223')