2013-11-09 29 views
1

我想要得到一個像這樣的字符串中的第二個點後的數字: 4.5.3。某種問題?但輸入字符串也可能看起來像這樣41.53.32。某種問題?以便在第二示例中針對以及。正則表達式,第二次點擊後得到數字

我試圖用

(?<=(\.\d\.))[0-9]+ 

做到這一點,它工作在1日例如,但當我嘗試添加(?<=(\.\d+\.))[0-9]+ 這是行不通的。

+2

你使用什麼語言或工具?最後一個號碼後總會有一個點嗎? –

+0

數字大小限制爲2位數?除了點之外,目標和輸入結束之間是否有任何文本? – Bohemian

+2

你應該澄清你正在使用什麼語言,因爲基於語言的正則表達式之間存在差異。正則表達式是相當標準的,但並不是所有的語言都以相同的方式使用正則表達式,因此在提問時請記住這一點。 – JaidynReiman

回答

-1

如果總是最後的數字後點,那麼你可以使用下面的表達式:

\d+(?=\.(?:[^\d]|$)) 

這將匹配一個或多個數字\d+這是後面跟着一個點.然後東西是不是沒有字符串$的數字[^\d],即(?=\.(?:[^\d]|$))

Regex101 Demo

+0

貶低選民的照顧評論? –

-1
(?:(?:.*\.)?){2}(\d+) 

以下的正則表達式應該適用於您的使用案例。

檢查出來here

+0

這不會起作用,因爲'。*'也會匹配點,所以如果它們出現在點之前,它會消耗多個點。嘗試'。*?'而不是 – Bohemian

+0

http://regex101.com/r/zW8vA1我對正則表達式進行了更改,這似乎正在工作正常 –

+0

它不適用於'1.2.3.4.5.6.'。它應該選擇3,但是你的正則表達式會選擇6.問題要求匹配第二個點之後的數字。你的正則表達式匹配最後一個數字,只要至少有兩個點出現在它之前,這是不正確的 – Bohemian

-1

如果你使用Perl或PHP,你可以試試這個模式:

(?:\d+\.){2}\K\d+ 
-1
(\d+.\d+.)\K\d+ 

匹配位點位點位,與第一部分作爲組未選中。

+0

不需要downvote,這完全按照要求。 http://rubular.com/r/V5cRQL84Fj –

-1

最簡單的完整的答案很可能是這樣的:

(?<=^(?:[^.]*\.){2})\d+ 

如果你在所有擔心的表現,這將是一個稍快:

^(?:[^.]*\.){2}(\d+) 

這人會捕捉在捕獲組1中需要的值。

如果您使用的引擎不支持可變長度後視,則需要使用第二個版本。

如果您願意,您可以用\d替換[^.],以僅匹配數字。

相關問題