Python 如何获取字符串中的第一个单词
案文如下:Python 如何获取字符串中的第一个单词,python,regex,Python,Regex,案文如下: WYATT - Ranked # 855 with 0.006 % XAVIER - Ranked # 587 with 0.013 % YONG - Ranked # 921 with 0.006 % YOUNG - Ranked # 807 with 0.007 % 我只想 WYATT XAVIER YONG YOUNG 我试过: (.*)?[ ] 但它给了我: WYATT - Ranked 使用这个正
WYATT - Ranked # 855 with 0.006 %
XAVIER - Ranked # 587 with 0.013 %
YONG - Ranked # 921 with 0.006 %
YOUNG - Ranked # 807 with 0.007 %
我只想
WYATT
XAVIER
YONG
YOUNG
我试过:
(.*)?[ ]
但它给了我:
WYATT - Ranked
使用这个正则表达式
^\w+
\w+
匹配1到多个字符
\w
类似于[a-zA-Z0-9\
^
描述字符串的开头
关于您的正则表达式
您的正则表达式
(.*)?[]
应该是^(.*?[])
或^(.*?(=])
如果您不需要空间,则不需要正则表达式。只需使用some\u string.split(“”,1)[0]
或some\u string.partition(“”)[0]
您不需要正则表达式在空白处拆分字符串:
In [1]: text = '''WYATT - Ranked # 855 with 0.006 %
...: XAVIER - Ranked # 587 with 0.013 %
...: YONG - Ranked # 921 with 0.006 %
...: YOUNG - Ranked # 807 with 0.007 %'''
In [2]: print '\n'.join(line.split()[0] for line in text.split('\n'))
WYATT
XAVIER
YONG
YOUNG
不需要
regex
。
string[:string.find(“”)]
您应该执行以下操作:
print line.split()[0]
如果你想特别狡猾,你可以这样写:
(firstWord, rest) = yourLine.split(maxsplit=1)
这应该是从两个方面带来最好的结果:
- 使用
进行优化调整,同时使用任何空格进行拆分maxplit
- 如图所示,提高了可靠性和可读性
我有点喜欢这个解决方案和它的一般解包功能,所以我不得不分享它。我认为这比
拆分
或分区
更为深奥。通过这种方式,您是否获得了有意义的性能或内存增益?实际上,您必须使用此方法对令牌的第一个实例迭代两次,但另一方面,您不会得到刚刚丢弃的新尾字符串…@sr2222是的,它必须迭代两次,但不是通过所有字符串。也不是通过令牌限制或分区来拆分的方法。这种方法是一种很好的优化方法,但如果OP希望在第一个字是整个字符串时工作,它就不能很好地工作。如果找不到空格,string.find
返回-1
,删除最后一个字符。如果单词被其他字符(例如制表符)分隔,则不会返回。只要它们被相同的字符分隔,就可以正常工作。只需切换到'\t'
。如果您有多个分隔符,它将不起作用,尽管即使有2或3个分隔符,使用split
或partition
代替regex也不是很困难。some_string.split(None,1)[0]
如果第一个单词之间有多个空格,则可以使用。假设您确实想要第一个单词,而不假设它是拆分数组中的第一项。想象一下我的字符串=“1 2 3 4最酷”。我有很多东西的正则表达式,但没有一个给定字符串返回“最酷”的正则表达式。我不认为建议拆分是有意义的,因为“返回第一个单词”并没有说明该工作在单词列表中的隐含顺序。您也可以使用firstword,leftoverstring=some_string获得剩余字符串。拆分(“”,1)
我同意。但是小优化提示:打印行。拆分(“”,1)[0]
。这将拆分限制为第一个单词。“1”在这里做什么?@algorythms在找到第一个拆分字符后会短路,因此您不会遍历字符串的尾部。在python2中,您可能无法使用关键字参数,因此您可能希望像firstWord一样,rest=yourLine.split(无,1)
不过有点不可读。我喜欢这个,它很简洁。如果您不需要该行的其余部分,可以使用(firstWord,*\ux)=yourLine.split(maxslit=1)
。使用*.
而不是.
,因为split()
根据maxslit
参数返回一个可变数量的参数,这将为您提供未来的证明。@huwChanges我不明白在使用maxslit=1
时为什么要用*.
保护您自己,结果数量有限,因为这样可以避免编码错误。如果更改maxslit
值,但未能添加额外的元组元素来解压缩额外值,如(firstWord,rest)=yourLine.split(maxslit=2)
,则会得到ValueError:要解压缩的值太多。另外一个好处是,您不创建未使用的变量rest
。