首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在字符串Python中查找第一个单词

在字符串Python中查找第一个单词
EN

Stack Overflow用户
提问于 2018-01-04 18:56:54
回答 6查看 6.3K关注 0票数 0

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

代码语言:javascript
运行
复制
("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"

所有人都必须返回第一个单词,如您所见,有些以空格开头,有撇号或以逗号结尾。

我使用了以下选项:

代码语言:javascript
运行
复制
return text.split()[0]
return re.split(r'\w*, text)[0]

两者在某些字符串上都有错误,所以谁能帮我?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-01-04 19:13:25

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

代码语言:javascript
运行
复制
re.match(r'\W*(\w[^,. !?"]*)', text).groups()[0]

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

票数 1
EN

Stack Overflow用户

发布于 2018-01-04 19:13:08

尝试下面的代码。我测试了你所有的输入,它工作得很好。

代码语言:javascript
运行
复制
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]

输出:

代码语言:javascript
运行
复制
Hello
a
don't
greetings
and
hi
票数 2
EN

Stack Overflow用户

发布于 2018-01-04 19:17:37

一种非正则表达式的解决方案:去掉前导标点/空格字符,拆分字符串以获得第一个单词,然后删除尾随标点/空格:

代码语言:javascript
运行
复制
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)))

输出:

代码语言:javascript
运行
复制
#Hello#
#a#
#don't#
#greetings#
#and#
#hi#
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48093746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档