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+)

Working demo

如您所见,正则表达式背后的想法是:

( ... ) 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+)

See Regex Demo here.