【问题标题】:Python 3 Finding the last number in a stringPython 3 查找字符串中的最后一个数字
【发布时间】:2013-06-09 07:03:30
【问题描述】:

如何找到大字符串中的最后一个数字?

例如,在以下字符串中,我希望输出 47:

'tr bgcolor="aa77bb"td>font face="verdana"color="white" size="2">b>Total/b>/font>/td>\td>font face="verdana"color="white" size="2">b>47/b>/font>/td>/tr>'

PS:我们不知道这个数字。数字 47 只是一个例子。可以是 0 到 900 之间的任意数字。

【问题讨论】:

  • 源代码中的 HTML 是否损坏?

标签: python string parsing search python-3.x


【解决方案1】:
>>> import re
>>> text = 'tr bgcolor="aa77bb"td>font face="verdana"color="white" size="2">b>Total/b>/font>/td>\td>font face="verdana"color="white" size="2">b>47/b>/font>/td>/tr>'
>>> re.findall(r'\d+', text)[-1]
'47'

如果您需要匹配浮点数,总有this

对于很长的字符串,这更有效:

re.search(r'\d+', text[::-1]).group()[::-1]

【讨论】:

  • 我猜它给出了相反的答案。然后,您可以反转最后的字符串。
  • 刚刚意识到无论如何你都可以使用re.findall(正在向后考虑)
  • 顺便说一下,对于长字符串来说,倒车是更好的方式。但这当然不适用于浮动的引用正则表达式。
  • @kirelagin 一开始我也这么认为,但后来我认为它永远不会很有用,但我会加回来
【解决方案2】:

我想我对查找一堆结果并选择最后一个结果的实现细节/性能了解不够,而不是只找到最后一个开始(没有进行任何性能比较);但是,这可能会更快:

>>> text = 'tr bgcolor="aa77bb"td>font face="verdana"color="white" size="2">b>Total/b>/font>/td>\td>font face="verdana"color="white" size="2">b>47/b>/font>/td>/tr>'
>>> import re
>>> re.search(r'(\d+)\D+$', text).group(1)
'47'

【讨论】:

  • +1 我比re.findall 更喜欢这个。我有一个类似的第二个版本,我将它重新添加到我的答案中,这样会更有效(不确定速度),但这看起来更好
  • 将 '+' 替换为 '*' 以分别匹配空字符串和右对齐的数字。例如,re.search(r'(\d*)\D*$', '').group(1) 返回 ''
猜你喜欢
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多