Python:如何只从字符串中删除第一个单词

时间:2012-12-31 06:10:30

标签: python-2.7

输入字符串如下:

line = "Cat Jumped the Bridge"

输出应该是“跳过桥梁”。

我试过

s2 = re.match('\W+.*', line).group()

但它返回

Traceback (most recent call last):
  File "regex.py", line 7, in <module>
    s2 = re.match('\W+.*', line).group()
AttributeError: 'NoneType' object has no attribute 'group'

显然这场比赛失败了。

感谢您的任何建议。 乔

6 个答案:

答案 0 :(得分:12)

Python的split有一个名为maxsplit的可选第二个参数,用于指定最大的分割数量:

line = "Cat Jumped the Bridge"
s2 = line.split(' ', 1)[1]

引用str.split的文档:

  

使用sep作为分隔符字符串,返回字符串中的单词列表。如果给出maxsplit,则最多完成maxsplit分割

所以解释一下这段代码: str.split(' ', 1)创建一个包含两个元素的列表:第一个元素是第一个单词(直到它到达空格),第二个元素是字符串的其余部分。为了仅提取字符串的其余部分,我们使用[1]来指示第二个元素。

注意:如果您担心有多个空格,请使用None作为str.split的第一个参数,如下所示:

line = "Cat Jumped the Bridge"
s2 = line.split(None, 1)[1]

答案 1 :(得分:4)

如果你不依赖于正则表达式,你可以这样做:

In [1]: line = "Cat Jumped the Bridge"

In [2]: s2 = ' '.join(line.split()[1:])

In [3]: s2
Out[3]: 'Jumped the Bridge'

line.split()获取字符串并将其拆分为空格,返回包含每个单词作为项目的列表:

In [4]: line.split()
Out[4]: ['Cat', 'Jumped', 'the', 'Bridge']

从该列表中,我们使用[1:]获取第二个元素(跳过第一个单词)及其后的所有内容:

In [5]: line.split()[1:]
Out[5]: ['Jumped', 'the', 'Bridge']

然后最后一篇文章使用join将它们全部加在一起,这里我们使用空格字符将列表中的所有字符串“连接”成一个字符串:

In [6]: ' '.join(line.split()[1:])
Out[6]: 'Jumped the Bridge'

答案 2 :(得分:4)

您还可以使用.partition()

>>> line = "Cat Jumped the Bridge"
>>> word, space, rest = line.partition(' ')
>>> word
'Cat'
>>> space
' '
>>> rest
'Jumped the Bridge'

要修复现有内容,请添加一个捕获组并使用\w代替\W(它们是对立的):

>>> re.match(r'(\w+)', line).group()
'Cat'

答案 3 :(得分:2)

可以更简单:

line = "Cat Jumped the Bridge"
s2 = " ".join(line.split()[1:])

使用正则表达式:

line = "Cat Jumped the Bridge"
s2 = re.sub('^\S+\s+', '', line)

答案 4 :(得分:1)

或.........

words = ["Cat", "Cool", "Foo", "Mate"]
sentence = "Cat Jumped the Bridge"

for word in words:
    if word in sentence:
        sentence = sentence.replace(word, "", 1)
        break

否则...

sentence = "Cat Jumped the Bridge"

sentence = sentence.split(" ")
sentence.pop(0)
sentence = " ".join(sentence)

答案 5 :(得分:0)

def delete_first_word(p):
    letter = 0
    for e in p:
        if e[0] == " ":
            return line[letter + 1:]
        else:
            letter = letter + 1
line = "Cat Jumped the Bridge"
print delete_first_word(line)