2012-10-26 64 views
1

我只想136.50捕捉以下如何解決這個負面lookbehind正則表達式?

$136.50 (was $195.00) 

我試圖以使用負回顧後不組一個價格,如果它是另一個價格之前。這是我有:

(?<!\$.+)\$(?<price>[\d.,]+)

我究竟做錯了什麼?

編輯:我認爲這個問題可能是我不能在lookaround中使用可變長度的字符串,但我不知道如何構造沒有一個正則表達式。

編輯:有時只有一個價格,在這種情況下,我想分組的價格。這就是爲什麼我沒有使用積極的前瞻來確認價格是第一個價格。

+0

有其他可能的格式或這種格式是唯一的發生嗎? – bukart

+1

爲什麼你不去第一個價格? –

+0

@bukfixart或者只有一個價格,或者會有兩種格式的價格,其中我會一直想要第一個 – jela

回答

3

不要使用負面後顧,只需要第一個價格(在第一組中,如果有分數,可能是第二組)。這樣的事情可能嗎?

/^.*?\$([\d,]+)(\.\d\d)?/ 
+0

我使用了一行PERL regexp檢查器,你可能必須從開始和結束刪除斜線... –

+0

謝謝這樣做比我更有意義原始的方法,雖然我仍然好奇是否有可能這樣做。 – jela

+0

很可能。儘管如此,它可能需要大量的後臺跟蹤,在這種情況下,這並沒有多大意義。正則表達式更好地向前邁進:) –

0

好了,我覺得你應該採取的第一個價格,太:

這應該匹配所有的價格,含。科馬以千,這樣一個從owlstead /^.*?\$(\d{1,3}(?:,\d{3})*(?:\.\d+)?).*$/

0

你可以使用這樣的事情

/(\$\d*.\d*)(?!.\1)/ 

這將匹配第一組,而不是遵循由同一組

相關問題