Python 捕获 2 个字符('=' 和 'I')之间信息的正则表达式代码
Python Regex code that captures information between 2 characters ('=' and 'I')
(是的,我知道有相关的正则表达式问题询问如何捕获两个字符之间的信息。我试过了,它们对我不起作用。我还尽可能深入地阅读了正则表达式教程。)
我有这样的代码,它使用 BeautifulSoup 以这种形式从网站上抓取一些信息:Exchange rate: 1 USD = 60.50 INR
此字符串存储在名为 'data' 的变量中。我必须从此字符串中捕获“60.50”。我有这个代码:
data = _funct()
rate = re.search("?<=\=)(.*?)(?=\I" , data)
print rate
没用。我哪里错了?
您可以像这样使用简单的正则表达式:
(\w+\.\w+)
如您所见,正则表达式背后的想法是:
( ... ) Use parentheses to capture the content
\w+\.\w+ any alphanumeric followed by a dot plus more alphanumeric.
如果您只想捕获数字,您可以使用:
\d+\.\d+
如果您查看 python 的代码生成器,您可以获得以下代码:
import re
p = re.compile(ur'(\w+\.\w+)')
test_str = u"Exchange rate: 1 USD = 60.50 INR"
re.search(p, test_str)
我认为您的正则表达式不起作用,因为您缺少开头的左括号和结尾的右括号。此外,I
之前的反斜杠 \
不是必需的(但它确实有效,因为 \I
不是元字符代码或类似的东西)。因此,您可以执行以下操作:
(?<=\=)(.*?)(?=I)
Please see Regex 101 Demo here.
不过,我认为,正如其他人所提到的,有更好的方法来解决这个问题,即寻找数字和小数点前加空格。然而,所建议的是一个困难,即汇率可能缺少前导数字(它可能以小数点开头),或者小数点可能根本不存在。考虑到这一点,我建议如下:
(?<=\=)(?:\s*)(\d+(?:\.\d*)?|\.\d+)
(是的,我知道有相关的正则表达式问题询问如何捕获两个字符之间的信息。我试过了,它们对我不起作用。我还尽可能深入地阅读了正则表达式教程。)
我有这样的代码,它使用 BeautifulSoup 以这种形式从网站上抓取一些信息:Exchange rate: 1 USD = 60.50 INR
此字符串存储在名为 'data' 的变量中。我必须从此字符串中捕获“60.50”。我有这个代码:
data = _funct()
rate = re.search("?<=\=)(.*?)(?=\I" , data)
print rate
没用。我哪里错了?
您可以像这样使用简单的正则表达式:
(\w+\.\w+)
如您所见,正则表达式背后的想法是:
( ... ) Use parentheses to capture the content
\w+\.\w+ any alphanumeric followed by a dot plus more alphanumeric.
如果您只想捕获数字,您可以使用:
\d+\.\d+
如果您查看 python 的代码生成器,您可以获得以下代码:
import re
p = re.compile(ur'(\w+\.\w+)')
test_str = u"Exchange rate: 1 USD = 60.50 INR"
re.search(p, test_str)
我认为您的正则表达式不起作用,因为您缺少开头的左括号和结尾的右括号。此外,I
之前的反斜杠 \
不是必需的(但它确实有效,因为 \I
不是元字符代码或类似的东西)。因此,您可以执行以下操作:
(?<=\=)(.*?)(?=I)
Please see Regex 101 Demo here.
不过,我认为,正如其他人所提到的,有更好的方法来解决这个问题,即寻找数字和小数点前加空格。然而,所建议的是一个困难,即汇率可能缺少前导数字(它可能以小数点开头),或者小数点可能根本不存在。考虑到这一点,我建议如下:
(?<=\=)(?:\s*)(\d+(?:\.\d*)?|\.\d+)