1

我试图在一行中捕获美元金额:

示例: blah blah blah (blah $23.32 blah) blah blac (blah) 我想捕获“$23.32”

这就是我正在使用的:r'?([\$][.*]+)'

我告诉它找到 (...) 的一次出现与 ? 然后我告诉它找到以“$”开头的东西以及后面可能出现的任何字符(这样我也可以得到小数点)。

但是,我得到一个错误error: nothing to repeat

4

4 回答 4

8

开头的问号是nothing to repeat错误的原因。

>>> import re
>>> re.compile(r'?')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/re.py", line 242, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat

匹配美元加上数字和点:

r'\$[\d.]+'

演示:

>>> re.search(r'\$[\d.]+', 'blah blah blah (blah $23.32 blah) blah blac (blah)').group()
'$23.32'
于 2013-06-05T20:40:25.097 回答
1

您应该提高有关正则表达式的基础知识。错误是由于 ? 在开始。它是一个量词,在这个量词之前什么都没有。您对 * 和 + 的使用也没有多大意义。在不知道您的确切要求的情况下,很难提出更好的解决方案,因为您的正则表达式存在太多问题。

于 2013-06-05T20:41:10.693 回答
1

好吧,根据http://docs.python.org/2/library/re.html[.*]+将匹配.*..*,*....**.*.*....因为特殊字符在集合中失去了意义。使用[.\d]+[.0-9]+代替。

于 2013-06-05T20:45:32.067 回答
1

虽然对正则表达式的建议是解决更复杂模式的方法(一般来说值得花时间学习),但对于简单的情况还有其他方法。如果我理解这个问题,似乎有点列表理解,比如:

x='blah blah blah (blah $23.32 blah) blah blac (blah)'
[i for i in x.split() if i.find('$') > -1]

将是一个非常简洁的方法。它返回一个字符串列表。

['$23.32']

或者,如果没有找到匹配项,

[]
于 2013-06-05T21:09:33.903 回答