2013-10-29 92 views
0

早安:)正則表達式:在沒有追隨者的情況下獲得帶有特殊追隨者的角色?

想象一下這樣的字符串:

-2x^3+3x^2-4x+1.5 

我想用 '^' 提取 'X',這是不遵守。 我試過(x)[^\^],但是這也捕獲了最後一個'x'後面的'+'。我怎樣才能提取'x',沒有下面的'+'?這甚至可能或者我必須在程序代碼的其餘部分手動執行它?

問候!

+0

從技術上講,你的正則表達式「匹配」,但不捕獲「+」號。只有括號內的內容才被捕獲。根據您使用的語言/引擎,您可以區分這兩件事情。 – acfrancis

回答

1

如下您可以使用負前瞻。

該表達式將匹配任何x,其後面不跟隨字符^

+0

+1這比我的選擇匹配字符串末尾的'x'要好。 –

+0

@ p.s.w.g謝謝,但您在回答中刪除了'| $'部分? :(如果你保留它,它會起作用;只是稍微長一些,因爲它現在不會在'3x^2 + 2x'中匹配:( – Jerry

+1

我已經添加它作爲替代方法只是爲了完整性,它*可能*是OP只是想在字符串中間匹配它的情況,儘管我懷疑它 –

1

你可以使用一個前向斷言,如果你的正則表達式引擎支持它:

(x)(?=[^^]) 

這將匹配任何x其次是比^其他任何字符,但它不會捕捉到下面的字符。

如果你也想在字符串的結尾匹配x,你可以這樣做:

(x)(?=[^^]|$) 

這將匹配任何x其次是比^其他任何字符或字符串的結束,但它不會捕獲以下字符(如果存在)。雖然Jerry's solution在這種情況下更加優雅。

x(?!\^) 

反斜線是逃避插入符號,因此不匹配行的開頭,但文字插入符號: