Python 以欧元、英镑和美元计价的正则表达式

Python 以欧元、英镑和美元计价的正则表达式,python,regex,unicode,Python,Regex,Unicode,我使用python正则表达式查找字符串中的所有价格。到目前为止,我只是在正确管理符号方面遇到了问题。 此代码及其输入:'happy$37.54000 happy$34$3454$3333欧元27.80欧元3.00.33.2英镑27.000' import sys import re price = sys.argv[1] new = re.findall(r'[\$\20AC\00A3]{1}\d+\.?\d{0,2}',price,re.UNICODE) for

我使用python正则表达式查找字符串中的所有价格。到目前为止,我只是在正确管理符号方面遇到了问题。 此代码及其输入:
'happy$37.54000 happy$34$3454$3333欧元27.80欧元3.00.33.2英镑27.000'

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

$37.54
$34
$3454    
$3333
我想要的是:

$37.54
$34
$3454
$3333
€27.80
€3.00    
£27.00
如果我在代码中添加欧元符号,由于该文件不是unicode字符,因此无法编译。我在想,既然
20AC
是欧元符号的unicode,而
\00A3
是英镑符号的unicode,那就行了,但事实并非如此

我认为,问题在于守则的这一部分:

[\$\20AC\00A3]...
任何帮助都将不胜感激

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

# -*- coding: utf-8 -*-
import sys
import re
price = sys.argv[1]
new = re.findall(r'[$€£]{1}\d+\.?\d{0,2}',price,re.UNICODE)
for prices in new:
    print prices

下面是一个与您的示例相匹配的正则表达式

[$)\d+(\.\d{2})?

值得注意的是,我假设一个周期后会有两个数字。所以这将匹配3.50,但忽略3.5。如果不需要这种行为,则需要将正则表达式调整为

[$)\d+(\.\d{1,2})?


在我的示例中,这将使用3.5。

您需要为正则表达式中的unicode字符代码添加
\u
。i、 e

new = re.findall(ur'[\$\u20AC\u00A3]{1}\d+\.?\d{0,2}',string,re.UNICODE)

我可以直接与符号匹配

[20AC\00A3]{1}\d+.\d{0,2}


如果某个东西将字符串暴露为字符类,则python fu比我多的人。可以安全地假设一个句点后面总是跟两位数字吗?如果您将
r'
更改为
ur'
?感谢kirby的建议,遗憾的是它不起作用。谢谢Jason,这是一个很好的观点,我已将其更改为[\$\20AC\00A3]{1}\d+\.?\d{2}?(这并不能解决问题,但我认为从长远来看,这是更好的代码)我尝试过类似的方法,但遇到了以下错误:SyntaxError:Non-ASCII字符'\xe2'。。。。你是否导入了一些知道如何处理字符的东西?或者在我的re.UNICODE标志之外使用了一些标志吗?我对python中的字符编码问题没有任何经验,但这个答案可能会有所帮助?真管用!非常感谢。(将此添加到文件顶部:#——编码:utf-8——)很好!永远不要低估谷歌搜索错误消息的威力。:)谢谢,这回答了符号问题。它不是完美的代码,因为它输出:$37.54 000$34$3454$3333 27.80 00.33 27.00,但它回答了问题。谢谢,我修好了。现在它也与角色匹配。您需要以unicode格式(带有
u
前缀)指定正则表达式。奇怪的是,我的命令行输出:SyntaxError:非ASCII字符'\xe2'。但是谢谢你的反馈,这个网站将来会很有帮助的。(很抱歉,我无法在此网站上投票)