2013-06-05 155 views
1

我試圖捕捉在一條線上的美元金額:

例如: blah blah blah (blah $23.32 blah) blah blac (blah) 我想捕捉「$ 23.32」

這是我使用的是什麼:r'?([\$][.*]+)'

我告訴它找到(...)的一個發生? 然後我告訴它找到一些以「$」開頭的字符和任何可能出現的字符(所以我也可以得到小數點)。

不過,我得到的error: nothing to repeat

+2

我不熟悉Python的正則表達式,但在許多其他語言中,第一個'?'就因爲它是一種會引起問題量詞,而在你的正則表達式中,它並沒有量化任何價值。 – Vulcan

+0

[爲什麼不使用](http://regex101.com/r/sM1wI4)'\ $ \ s * \ d +(?:\。\ d +)?'? – HamZa

回答

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

你應該提高對正則表達式的基本知識。錯誤是由於?在befinning。這是一個量詞,在量詞之前什麼也沒有。你使用*和+也沒什麼意義。不知道你的確切需求,很難提出更好的解決方案,因爲你的正則表達式存在太多問題。

1

雖然對正則表達式的建議是更復雜模式的推薦方式(並且一般來說值得花時間學習),但對於簡單情況還有其他方法。如果我對這個問題有所瞭解,似乎有點理解,比如:

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

會是一個非常簡潔的方式。它返回一個字符串列表。

['$23.32'] 

或者,如果沒有發現匹配,

[]