11

输入字符串如下所示:

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'

所以显然这场比赛失败了。

感谢您的任何建议。乔

4

6 回答 6

17

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]
于 2012-12-31T06:57:17.663 回答
5

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

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'
于 2012-12-31T06:16:33.953 回答
5

您还可以使用.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'
于 2012-12-31T06:17:09.283 回答
3

可以更简单:

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

使用正则表达式:

line = "Cat Jumped the Bridge"
s2 = re.sub('^\S+\s+', '', line)
于 2012-12-31T06:13:32.333 回答
1

Or.........

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

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

Otherwise....

sentence = "Cat Jumped the Bridge"

sentence = sentence.split(" ")
sentence.pop(0)
sentence = " ".join(sentence)
于 2015-01-21T06:23:48.203 回答
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)
于 2017-02-10T02:17:47.663 回答