我试图在一行中捕获美元金额:
例如:
blah blah blah (blah $23.32 blah) blah blac (blah)
我想拍摄“$ 23.32”
这就是我正在使用的:r'?([\$][.*]+)'
我告诉它找到一个(...)的出现? 然后我告诉它找到一个以“$”开头的东西和任何可能出现的字符(所以我也可以得到小数点)。
但是,我收到错误error: nothing to repeat
答案 0 :(得分: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'
答案 1 :(得分:1)
您应该改进有关正则表达式的基础知识。错误是由于?在befinning。这是一个量词,在这个量词之前没有任何东西。你使用*和+也没什么意义。在不知道您的确切要求的情况下,很难提出更好的解决方案,因为您的正则表达式存在太多问题。
答案 2 :(得分:1)
嗯,根据http://docs.python.org/2/library/re.html,[.*]+
会匹配.*..*
,*....*
,*.*.*.
等......因为特殊字符会在集合中失去意义。请改用[.\d]+
或[.0-9]+
。
答案 3 :(得分:1)
虽然对正则表达式的建议是获取更复杂模式的方法(并且非常值得花时间学习),但还有其他简单案例的方法。如果我理解这个问题,似乎有一点列表理解,比如:
x='blah blah blah (blah $23.32 blah) blah blac (blah)'
[i for i in x.split() if i.find('$') > -1]
将是一个非常简洁的方法。它返回一个字符串列表。
['$23.32']
或者,如果找不到匹配项,
[]