欧元、英镑和美元价格的正则表达式

Ror*_*ach 2 python regex unicode

我正在使用 python 正则表达式来查找字符串中的所有价格。到目前为止,我只是在正确管理符号方面遇到了麻烦。\n此代码的输入为:'happy$37.54000happy$34$3454$3333\xe2\x82\xac27.80\xe2\x82\xac3.00.33.2\xc2\xa327.000'

\n\n
   import sys\n   import re\n   price = sys.argv[1]\n   new = re.findall(r'[\\$\\20AC\\00A3]{1}\\d+\\.?\\d{0,2}',price,re.UNICODE)\n   for prices in new:\n       print prices\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
$37.54\n$34\n$3454    \n$3333\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要的是:

\n\n
$37.54\n$34\n$3454\n$3333\n\xe2\x82\xac27.80\n\xe2\x82\xac3.00    \n\xc2\xa327.00\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我将欧元符号添加到代码中,则该文件将无法编译,因为它不是 unicode 字符。我在想,既然20AC是欧元符号的unicode,并且\\00A3是英镑符号的unicode,那么这样就可以了,但事实并非如此。

\n\n

我认为问题在于这部分代码:...

\n\n
[\\$\\20AC\\00A3]...\n
Run Code Online (Sandbox Code Playgroud)\n\n

任何帮助将不胜感激

\n\n

为未来的人编辑 - 这是最好的代码答案:

\n\n
# -*- coding: utf-8 -*-\nimport sys\nimport re\nprice = sys.argv[1]\nnew = re.findall(r'[$\xe2\x82\xac\xc2\xa3]{1}\\d+\\.?\\d{0,2}',price,re.UNICODE)\nfor prices in new:\n    print prices\n
Run Code Online (Sandbox Code Playgroud)\n

Jas*_* L. 5

这是与您的示例相匹配的正则表达式。

\n\n

[$\xe2\x82\xac\xc2\xa3]\\d+(\\.\\d{2})?

\n\n

值得注意的是,我假设句点后面跟着两个数字。所以这将匹配 3.50 但忽略 3.5。如果不需要这种行为,您需要将正则表达式调整为

\n\n

[$\xe2\x82\xac\xc2\xa3]\\d+(\\.\\d{1,2})?

\n\n

在我的例子中,这将是 3.5。

\n