从字符串中提取数字

时间:2018-07-06 04:58:10

标签: python regex string selenium extract

我正在尝试从unicode字符串中提取数字。字符串看起来像raised by 64 backersraised by 2062 backers。我尝试了许多不同的方法,但是以下代码是唯一实际起作用的代码。

backers = browser.find_element_by_xpath('//span[@gogo-test="backers"]').text
match = re.search(r'(\d+)', backers)
print(match.group(0))

由于我不确定我需要从字符串中提取子字符串的频率,并且我不想创建大量额外的变量和代码行,所以我想知道是否有更短的方法来完成这个吗?

我知道我可以做这样的事情。

def extract_digits(string):
    return re.search(r'(\d+)', string)

但是我希望只使用一个衬里,这样我就可以构造脚本而无需使用诸如此类的附加功能。

backers = ...
title = ...
description = ...
...

即使它显然不起作用,我也想做以下类似的事情,但是它并没有按预期工作。

backers = re.search(r'(\d+)', browser.find_element_by_xpath('//span[@gogo-test="backers"]').text)

输出看起来像这样。

<_sre.SRE_Match object at 0x000000000542FD50>

有什么办法可以解决?!

2 个答案:

答案 0 :(得分:2)

作为一种选择,您可以跳过使用正则表达式,而使用内置的Python isdigit()(无需其他导入):

digit = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()][0]

答案 1 :(得分:1)

您可以尝试以下方法:

number = backers.findall(r'\b\d+\b', 'raised by 64 backers')

输出:

64

所以方法可能是这样的:

def extract_digits(string):
    return re.findall(r'\b\d+\b', string)

演示 here

编辑:,因为您希望所有内容都在一行中,所以请尝试以下操作:

import re

backers = re.findall(r'\b\d+\b', browser.find_element_by_xpath('//span[@gogo-test="backers"]').text)[0]

PS:

搜索⇒在字符串中的任何地方找到某些东西,然后返回match对象
findall⇒在字符串中的任何地方找到东西,并返回一个列表。

文档:

  

扫描字符串以查找常规位置的第一个位置   表达式模式产生匹配,并返回对应的   MatchObject实例。如果字符串中没有位置匹配,则返回None   模式;请注意,这与找到零长度不同   在字符串中的某个位置匹配。

文档链接:docs.python.org/2/library/re.html

要对search执行相同操作,请使用以下代码:

backers = re.search(r'(\d+)', browser.find_element_by_xpath('//span[@gogo-test="backers"]').text).group(0)