我必须编写一个函数,该函数应返回以下字符串中的第一个单词:
("Hello world") -> return "Hello"
(" a word ") -> return "a"
("don't touch it") -> return "don't"
("greetings, friends") -> return "greetings"
("... and so on ...") -> return "and"
("hi") -> return "hi"
所有人都必须返回第一个单词,如您所见,有些以空格开头,有撇号或以逗号结尾。
我使用了以下选项:
return text.split()[0]
return re.split(r'\w*, text)[0]
两者在某些字符串上都有错误,所以谁能帮我?
发布于 2018-01-04 19:13:25
区分撇号和单引号是很棘手的,撇号应该是单词的一部分,单引号是语法的标点符号。但由于您的输入示例不显示单引号,因此我可以这样做:
re.match(r'\W*(\w[^,. !?"]*)', text).groups()[0]
对于您的所有示例,这都是有效的。不过,它不适用于"'tis all in vain!"
这样的非典型应用程序。它假定单词以逗号、点、空格、刘海、问号和双引号结尾。此列表可以按需扩展(在括号中)。
发布于 2018-01-04 19:13:08
尝试下面的代码。我测试了你所有的输入,它工作得很好。
import re
text=["Hello world"," a word ","don't touch it","greetings, friends","... and so on ...","hi"]
for i in text:
rgx = re.compile("(\w[\w']*\w|\w)")
out=rgx.findall(i)
print out[0]
输出:
Hello
a
don't
greetings
and
hi
发布于 2018-01-04 19:17:37
一种非正则表达式的解决方案:去掉前导标点/空格字符,拆分字符串以获得第一个单词,然后删除尾随标点/空格:
from string import punctuation, whitespace
def first_word(s):
to_strip = punctuation + whitespace
return s.lstrip(to_strip).split(' ', 1)[0].rstrip(to_strip)
tests = [
"Hello world",
"a word",
"don't touch it",
"greetings, friends",
"... and so on ...",
"hi"]
for test in tests:
print('#{}#'.format(first_word(test)))
输出:
#Hello#
#a#
#don't#
#greetings#
#and#
#hi#
https://stackoverflow.com/questions/48093746
复制相似问题