从字符串中提取数字
Extract Digits from String
我正在尝试从 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>
有什么办法可以解决这个问题吗?!
你可以试试这个:
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:
搜索 ⇒ 在字符串中的任何地方找到一些东西并且 return 一个 match 对象
findall ⇒ 在字符串和 return 列表中的任何位置查找内容。
文档:
Scan through string looking for the first location where the regular
expression pattern produces a match, and return a corresponding
MatchObject instance. Return None if no position in the string matches
the pattern; note that this is different from finding a zero-length
match at some point in the string.
文档 link: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)
作为一个选项,您可以跳过使用正则表达式并使用内置 Python isdigit()
(不需要额外导入):
digit = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()][0]
我正在尝试从 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>
有什么办法可以解决这个问题吗?!
你可以试试这个:
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:
搜索 ⇒ 在字符串中的任何地方找到一些东西并且 return 一个 match 对象
findall ⇒ 在字符串和 return 列表中的任何位置查找内容。
文档:
Scan through string looking for the first location where the regular expression pattern produces a match, and return a corresponding MatchObject instance. Return None if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.
文档 link: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)
作为一个选项,您可以跳过使用正则表达式并使用内置 Python isdigit()
(不需要额外导入):
digit = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()][0]