在第二次出现''(空格)后如何删除所有字符

时间:2019-07-29 20:30:14

标签: python regex python-3.7

我的名字正则表达式在一些条目中被证明是错误的:

find_name = re.search(r'^[^\d]*', clean_content)

上面的代码会在一些条目上输出类似的内容:

TERRI BROWSING APT A # current output

因此,我需要一种方法来进行修剪;它使我的程序的其余部分绊倒了。 我唯一想到的标识符是我是否可以某种方式检测到第二个空格;并删除其后的所有字符。

我只需要名字和姓氏;

TERRI BROWSING # desired

删除这些字符后,我可以.strip()移出尾随空格,只需要一种方法就可以删除第二个空格之后的所有内容。...或者可能只检测到两个单词,仅此而已。

3 个答案:

答案 0 :(得分:4)

也许您不需要正则表达式,但可以使用简单的拆分和联接:

text = 'TERRI BROWSING APT A'
' '.join(text.split(' ')[0:2])
# 'TERRI BROWSING'

答案 1 :(得分:1)

您可以这样做:

^\S+\s+\S+
  • ^匹配字符串的开头

  • \S+匹配一个或多个非空格

  • \s+匹配一个或多个空格


此外,假设空格实际上是一个空格字符,则可以使用 str.find 找到第二个空格的索引,然后将字符串切成该点:

text[:text.find(' ', text.find(' ') + 1)] 

示例:

In [326]: text = 'TERRI BROWSING APT A'                                                                                                                                                                     

In [327]: re.search(r'^\S+\s+\S+', text).group()                                                                                                                                                            
Out[327]: 'TERRI BROWSING'

In [338]: text[:text.find(' ', text.find(' ') + 1)]                                                                                                                                                         
Out[338]: 'TERRI BROWSING'

答案 2 :(得分:1)

如果要删除其余部分,可以将非空白字符\S*匹配2倍,后跟一个空格,然后将其捕获到一个组中。然后将任何char 0+次匹配,并使用re.sub

替换为第一个捕获组
^(\S* \S* ).*

Regex demo | Python demo

import re

print(re.sub(r"^(\S* \S* ).*", r"\1", "TERRI BROWSING APT A"))

结果

  

TERRI浏览