我試圖捕捉在一條線上的美元金額:
例如: blah blah blah (blah $23.32 blah) blah blac (blah)
我想捕捉「$ 23.32」
這是我使用的是什麼:r'?([\$][.*]+)'
我告訴它找到(...)的一個發生? 然後我告訴它找到一些以「$」開頭的字符和任何可能出現的字符(所以我也可以得到小數點)。
不過,我得到的error: nothing to repeat
我試圖捕捉在一條線上的美元金額:
例如: blah blah blah (blah $23.32 blah) blah blac (blah)
我想捕捉「$ 23.32」
這是我使用的是什麼:r'?([\$][.*]+)'
我告訴它找到(...)的一個發生? 然後我告訴它找到一些以「$」開頭的字符和任何可能出現的字符(所以我也可以得到小數點)。
不過,我得到的error: nothing to repeat
錯誤在開始的問號是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'
你應該提高對正則表達式的基本知識。錯誤是由於?在befinning。這是一個量詞,在量詞之前什麼也沒有。你使用*和+也沒什麼意義。不知道你的確切需求,很難提出更好的解決方案,因爲你的正則表達式存在太多問題。
那麼,根據http://docs.python.org/2/library/re.html,[.*]+
將匹配.*..*
,*....*
,*.*.*.
等......作爲特殊字符失去套它們的含義。改爲使用[.\d]+
或[.0-9]+
。
雖然對正則表達式的建議是更復雜模式的推薦方式(並且一般來說值得花時間學習),但對於簡單情況還有其他方法。如果我對這個問題有所瞭解,似乎有點理解,比如:
x='blah blah blah (blah $23.32 blah) blah blac (blah)'
[i for i in x.split() if i.find('$') > -1]
會是一個非常簡潔的方式。它返回一個字符串列表。
['$23.32']
或者,如果沒有發現匹配,
[]
我不熟悉Python的正則表達式,但在許多其他語言中,第一個'?'就因爲它是一種會引起問題量詞,而在你的正則表達式中,它並沒有量化任何價值。 – Vulcan
[爲什麼不使用](http://regex101.com/r/sM1wI4)'\ $ \ s * \ d +(?:\。\ d +)?'? – HamZa