Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取字符串中的第一个单词_Python_Regex - Fatal编程技术网

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