2016-07-02 33 views
0

假設我們有以下字符串:正則表達式匹配數據類型和精度

NUMBER 
NUMBER(10) 

我需要論文的字符串相匹配的正則表達式表達:

NUMBER  => Group(0) = NUMBER 
NUMBER(10) => Group(0) = NUMBER, Group(1) = 10 

下面的表達式做到這一點,但它對我來說似乎有點難看:

([^[\]]+)\(([^)]+)\)|([^[\]]+) 

這被翻譯成21個步驟。 由於我不是一個正則表達式專家,有人能幫助我改進這個表達式以使其更快嗎?

+0

首先要提的是:你的表情有什麼問題?它會返回不正確的匹配嗎?那麼,有沒有靜態字符串的任何部分?括號內是否總是有數字?看看[這裏](https://regex101.com/r/aZ3lZ3/2)。您沒有指定該語言,順便說一句,這很重要。 –

+1

值得注意的另一件事:步驟的數量並不直接表示性能。 –

+1

恩,['(\ w +)(?:\((\ d +))?'](https://regex101.com/r/aZ3lZ3/3)看上去最短。 –

回答

1

這似乎簡單:

([^(]+)(?:\((.+?)\))? 

Regex101說6個步驟"NUMBER",和13 "NUMBER(10)"

您可以考慮將^添加到開始位置並將$加到更嚴格的位置,在這種情況下,每個輸入示例的步數會增加2。