【问题标题】:How can I split a string with a number at the end? [duplicate]如何在结尾处拆分带有数字的字符串? [复制]
【发布时间】:2014-06-12 13:38:07
【问题描述】:

我有一个以数字结尾的字符串,与字符串的其余部分用空格隔开,例如两个例子:

blah 45 blah 89

1. blah blah  blah blah  42

如何在 Python 中使用正则表达式将字符串分隔为最后一个数字和字符串的其余部分?谢谢!

【问题讨论】:

  • blah 45 blah 89 的输出是什么?
  • 数字总是在字符串的末尾吗?

标签: python regex string


【解决方案1】:

使用str.rsplit:

In [100]: s = 'blah 45 blah 89'

In [101]: s1, n = s.rsplit(None, 1)

In [102]: s1, n
Out[102]: ('blah 45 blah', '89')

【讨论】:

  • 谢谢。如果我想根据第一个空格分割字符串,我该如何更改代码,例如blah45 blah 89?
  • @Tim 使用split 而不是rsplit
【解决方案2】:

如果你有一个以数字结尾的字符串并且只想要这个数字,那么你可以使用str.rpartition() 从字符串的右侧进行分区。

a = '1. blah blah  blah blah 42'

b = a.rpartition(' ')

print(b)
# ('1. blah blah  blah blah', ' ', '42')

print(b[-1])
# '42'

【讨论】:

  • 字符串的其余部分呢?谢谢
  • str.rpartition 返回一个由 3 个元素组成的序列,(first_part、separator、last_part)。如果您选择第 -1 个元素,您实际上选择了最后一个元素,因此您会得到数字。
【解决方案3】:

如果你坚持使用正则表达式,那么下面就可以了:

import re

s='blah 45 blah 89'
print re.match(r'.*\s(.*)',s).group(1)

【讨论】:

  • 以下也可以:re.split(r'\s+',s)[-1]
  • 谢谢。你能解释一下'.*\s(.*)'吗? \s 表示一个空格,字符串中有几个空格,为什么是最后一个呢?为什么(...)\s之后不是前后都有?
  • 点是任何字符,星号会吃掉尽可能多的字符,直到碰到 \s,即空格。然后,pars 会捕获任何内容,直到行尾,这就是您所要求的。
  • 谢谢。 (1) 为什么字符串不拆分为blah45 blah 89? (2)为什么'.*\s(.*)'不是'(.*)\s(.*)'
  • (1) 因为 * 是贪婪的,并且尽可能多地吃。还有一个写成 *? 的非贪婪修饰符,它将产生 ('blah','45 blah 89') 输出。 (2) 如果要捕获某些内容,则只需要 (),并且只要求该行的最后一个单词。
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多