我正在尝试从unicode字符串中提取数字。字符串看起来像raised by 64 backers
和raised 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>
有什么办法可以解决?!
答案 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)