2012-01-24 48 views
1

我是非常新的正則表達式,無法讓我的頭完全纏繞它。如何從字符串中提取以逗號分隔的數字

我想寫兩個正則表達式的 - 你需要告訴我,如果他們甚至可能。兩者都基於VB.net語法。

正則表達式1: 字符串我測試反對 - 在磁盤上 大小:25754900936個字節

它擁有領先的空間屈指可數,但文本始終是相同的。我試圖提取出這個數字(25,754,900,936)。

我試過一些正則表達式,但是我不能在一行上得到所有東西。這些逗號會讓我搞砸,並返回多個匹配項(例如,\ d + \ W +會給我四個匹配項,每一組數字都用逗號分隔)

我做的最好的是[0-9/,] *,但是這給了我25個空的比賽和一個比賽(在比賽19)的數字。我需要這匹配匹配1.

可以嗎?看到一個正則表達式,我可以從字符串中提取這樣的數字,這真的很有幫助。

正則表達式2:
相同的想法,但現在是多行。

我測試對字符串 -

  0 File(s)    0 bytes 
      1 File(s)   11,546 bytes 
      1 File(s)  259,584 bytes 
      3 File(s)   5,682 bytes 
     17218 File(s) 25,705,262,230 bytes 

我只需要在最後一行(25705262230)的總字節數。是否有可能在多行搜索中做到這一點?相同的交易 - 文字總是相同的。

回答

2

關於第一個正則表達式來只提取號碼,試試這個:

(\d+,?)+ 

它將匹配的一個或多個數字(0-9)組,任選隨後發生一個逗號(,?)或更多次。

爲了您的多行字符串,如果你知道該字符串將始終處於「字節」結束了,試試這個:

(\d+,?)+(?=\s*bytes$) 

這將再次匹配類似於第一個正則表達式,雖然行必須結束「字節'爲$表示行結束。然後你需要提取捕捉值:

'Regex is your regular expression object containing the second regex 
regex.Match([your string]).Value 
+0

James - 兩個都確實有效,但我實際上並沒有在.net中使用它 - 我使用的是可以執行regex的第三方應用程序。不幸的是,它只能用於第一個捕獲,第一組。在第二個正則表達式中的任何方式來獲得它的位置?現在它仍然有第一組的字節字第一次捕捉,但否則它是完美的。 – Pat

+0

@Pat啊我沒有看到任何擔憂。你需要添加一個積極的向前看,這樣字符串的末尾(你不希望捕獲的'字節')將不會被包含。我已經修改了上面的第二個正則表達式。讓我知道如果這是有效的 - 我簡單地通過使用'regex.Match([你的字符串])提取匹配的值(不帶'字節')。值# –

+0

完美 - 謝謝! – Pat

0

對於提取數量,使用正則表達式,如:

/Size on disk: ((?:\d+,?)+)/ 

,然後提取捕獲的第一組。在JavaScript:

var s = "Size on disk: 25,754,900,936 bytes"; 
var bytes = s.match(/Size on disk: ((?:\d+,?)+)/)[1]; 
// "25,754,900,936" 

這個正則表達式表示(從內向外)

  • \d - 尋找一個數字字符
    • + - ...嗯,OK,找​​到一個或更多的人
  • , - 後面跟一個文字逗號
    • ? - ...好吧,也許;沒關係,如果你不能找到其中的一個
  • (?:…) - 現在,拿這一切,把它作爲我們並不需要保存
    • +一組 - 允許該組發生任意次數
  • (…) - 捕捉所有這一切的結果,並將其保存爲我
  • 噢,並確保所有的在此之前,你可以找到的文本右"Size on disk: "

在多行上,將您的正則表達式錨定到輸入的末尾。同樣,這裏的JavaScript的一個例子:

var re = /((?:\d+,?)+) bytes$/m; 
var total = multiline.match(re)[1]; 

你可以看到它在這裏的行動:http://jsfiddle.net/uFfsc/1/

它是由你來學習如何錨你的正則表達式在.NET中的輸入端。

+0

Phrogz - 感謝您的解釋。上面的James的正則表達式運行良好,不幸的是(我沒有提及它),我使用的是第三方應用程序,它只接受正則表達式。這不是一種編程語言,我可以添加JavaScript等等。但是你的解釋很棒,幫助我更好地理解正則表達式的做法。 – Pat

+0

好的補充與非捕獲括號,所以沒有創建一個回參考:) –

+0

@Pat很高興有幫助。 – Phrogz

相關問題