我必须编写一个函数,该函数应该返回以下字符串中的第一个单词:
("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]
某些字符串都有错误,所以谁能帮帮我???
答案 0 :(得分:3)
区分应该是单词的一部分的撇号和作为语法标点符号的单引号是很棘手的。但由于您的输入示例没有显示单引号,我可以使用它:
re.match(r'\W*(\w[^,. !?"]*)', text).groups()[0]
对于您的所有示例,这都有效。但是,它不适用于像"'tis all in vain!"
这样的非典型事物。它假定单词以逗号,点,空格,刘海,问号和双引号结尾。该列表可以按需扩展(在括号中)。
答案 1 :(得分: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
答案 2 :(得分:2)
非正则表达式解决方案:剥离前导符号/空格字符,拆分字符串以获取第一个单词,然后删除尾随标点符号/空格:
#Hello#
#a#
#don't#
#greetings#
#and#
#hi#
输出:
{{1}}
答案 3 :(得分: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
答案 4 :(得分: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
答案 5 :(得分:0)
我通过使用第一次出现的空格来停止第一个单词的“获取”来完成此操作。像这样:
stringVariable = whatever sentence
firstWord = ""
stringVariableLength = len(stringVariable)
for i in range(0, stringVariableLength):
if stringVariable[i] != " ":
firstWord = firstWord + stringVariable[i]
else:
break
此代码将解析要获取其第一个单词的字符串变量,并将其添加到名为firstWord的新变量中,直到到达空白处。我不太确定您是如何将其放入函数中的,因为我对这件事很陌生,但是我敢肯定可以做到!