如何使用正则表达式从字符串中取一个数字?

时间:2012-01-18 15:48:00

标签: python regex currency

如何在此字符串中输入数字(以下示例中的 20 )?

string = """<option value="full_review">Detailed review (Up to $20.00)</option>"""

我用过

detailint = re.findall("""value="full_review">Detailed review (Up to $(.*))</option>""", bidsrc)

但它不会让我流汗!任何技巧?

5 个答案:

答案 0 :(得分:3)

假设bidsrc = string,您需要同时转义$(),因为它们对正则表达式编译器具有特殊含义。您还希望使用.*?或更好[\d.]+来匹配实际金额。

r"""value="full_review">Detailed review \(Up to \$([\d.]+)\)</option>"""

答案 1 :(得分:1)

非常简单。

>>> import re
>>> s = "Detailed review (Up to $20.00)"
>>> re.findall("(\d+)\.",s)
['20']

我确定你已经检查过,但subject上的python文档非常有帮助。另请查看python使用的特殊字符,例如$()

为了更详细地解释,在上面的正则表达式中,(\d+)是捕获组,它在一段时间之前捕获一个或多个数字(此处,转义为\.)。这就是为什么它匹配20而不是00

答案 2 :(得分:1)

请记住&#39; $&#39;在正则表达式中有特殊含义,因此&#39;。&#39;,&#39;(&#39;,&#39;)&#39;,&#39; *&#39;和许多其他人。如果你不想让它们被特别处理,你必须逃避(例如&#39; \ $&#39;)

答案 3 :(得分:0)

试试这个

import re
string = '<option value="full_review">Detailed review (Up to $20.00)</option>'
finded = re.findall("""value="full_review">Detailed review \(Up to \$([\d.].*)\)</option>""",string)
print finded

答案 4 :(得分:0)

import re
s = "Detailed review (Up to $20.00)"
 re.findall("\$\d+\.\d+",s)[0][1:]

给你20.00(包括小数)