0

我必须编写一个函数,它应该返回以下字符串中的第一个单词:

("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]

一些字符串都出错了,谁能帮帮我???

4

6 回答 6

2

试试下面的代码。我用你所有的输入进行了测试,它工作正常。

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-04T11:13:08.473 回答
1

试试这个:

>>> def pm(s):
...     p = r"[a-zA-Z][\w']*"
...     m = re.search(p,s)
...     print m.group(0)
... 

测试结果:

>>> pm("don't touch it")
don't
>>> pm("Hello w")
Hello
>>> pm("greatings, friends")
greatings
>>> pm("... and so on...")
and
>>> pm("hi")
hi
于 2018-01-04T11:22:23.663 回答
1

区分应该是单词一部分的撇号和作为语法标点的单引号是很棘手的。但是由于您的输入示例不显示单引号,因此我可以这样做:

re.match(r'\W*(\w[^,. !?"]*)', text).groups()[0]

对于您的所有示例,这都有效。不过,它不适用于非典型的东西"'tis all in vain!",比如 . 它假定单词以逗号、点、空格、刘海、问号和双引号结尾。此列表可以按需扩展(在括号中)。

于 2018-01-04T11:13:25.120 回答
1

非正则表达式解决方案:剥离前导标点/空白字符,拆分字符串以获取第一个单词,然后删除尾随标点/空白:

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#
于 2018-01-04T11:17:36.940 回答
0

你可以尝试这样的事情:

import re
pattern=r"[a-zA-Z']+"
def first_word(words_tuple):
    match=re.findall(pattern,words_tuple)
    for i in match:
        if i[0].isalnum():
            return i



print(first_word(("don't touch it")))

输出:

don't
于 2018-01-04T17:55:27.730 回答
0

我通过使用第一次出现的空白来停止“获取”第一个单词来做到这一点。像这样的东西:

stringVariable = whatever sentence
firstWord = ""
stringVariableLength = len(stringVariable)
for i in range(0, stringVariableLength):
    if stringVariable[i] != " ":
        firstWord = firstWord + stringVariable[i]
    else:
        break

此代码将解析您想要获取第一个单词的字符串变量,并将其添加到一个名为 firstWord 的新变量中,直到它第一次出现空白。我不完全确定你将如何将它放入一个函数中,因为我对这一切都很陌生,但我相信它可以完成!

于 2020-11-06T16:26:33.667 回答