2016-07-13 103 views
1

需要下面的輸出得到字和十進制值陣列分開:如何使用正則表達式

  1. 十進制值必須與它是,如果我們使用
  2. 「()」中輸入字符串變量input1 = "pops + nts(1.75%)"給出,那麼它應該刪除關閉和打開托架

預期輸出:[0]="pops" [1]="nts" [2]="1.75"

current output as given in image , need output for 3rd and 4rth array element value must be in one array element like 1.75

static void Main(string[] args) 
{ 
    //string input1 = "pops + nts(1.75%)"; 
    string input2 = "pops + nts1.75%"; 
    string[] Resul2 = Regex.Split(input2, @"(\W+)(\D+)(\d+)"); 
} 
+0

大量的信息在這裏失蹤。什麼是「流行」和「nts」?它們是常量嗎?格式只會因圓括號而有所不同? – ClasG

+0

'pops'和'nts'是否可以包含數字?或以數字結尾?如果有一個名爲'nts1'的變量,然後粘貼一個'1.75%',那麼就沒有辦法解決。 –

+0

嘗試'(\ w +)\ s * \ + \ s *([^ \ W \ d] +)\(?(\ d * \。\ d +)'參見http://ideone.com/ttAMyY –

回答

1

注意ntspops不能有數字結尾,否則,你的任務是不可能完成。

我建議

(\w+)\s*\+\s*(\w+?)\(?(\d*\.\d+) 

Regex.Match使用。見the regex demo

詳細

  • (\w+) - 1個或多個單詞字符(第1組)
  • \s*\+\s* - 1個或多個單詞字符 - 一個+與0+周圍
  • (\w+?)空格(第2組),但儘可能少
  • \(?可選((一個或零)
  • (\d*\.\d+) - 3組匹配浮點/整數值(允許.XX一種花車)

C# demo

var s = "pops + nt1s11.75%"; 
var pat = @"(\w+)\s*\+\s*(\w+?)\(?(\d*\.\d+)"; 
var r = Regex.Match(s, pat); 
if (r.Success) 
    Console.Out.WriteLine("{0}\n{1}\n{2}", r.Groups[1].Value, r.Groups[2].Value, r.Groups[3].Value); 

輸出:

pops 
nt1s 
11.75 
0

正如評論 - 不是很多去,但

(\w+)\s*\+\s*([\w-[\d]]+)\(?(\d*\.\d*) 

會得到你要求什麼。

See it here at regexstorm

它捕獲一個單詞,匹配可選空間,然後是+,然後是可選空間。然後它捕獲包含數字的而不是,可選地匹配(,並最終捕獲十進制數。其餘的被忽略。要更加嚴格與輸入添加開始和結束錨:

^(\w+)\s*\+\s*([\w-[\d]]+)\(?(\d*\.\d*)%\)$ 
+0

刪除第一個d「*」後第一個代碼工作string [] Resul2 = Regex.Split(input2,@「(\ w + )\ s * \ + \ s *(\ w +)\(?(\ d + \。\ d *)「); –

+0

@yashfale:不,它不適用於'pops + nts11.75%',請參閱[本演示](http://regexstorm.net/tester?p = \(%5cw%2b \)%5cs *%5c%2b%5cs * \(%5cw%2b \)%5c \(%3f \ (%5cd%2b%5c。%5cd * \)&i = pops +%2b +nts 11.75%25)。請回答我的問題以澄清問題的評論 –

+0

@ClasG,是的,如果我使用nts12.75 %然後它只給了我.75只有「/ d +」,即使我使用「/ d *」它給出.75仍然沒有工作(注意:如果數字不在括號內,那麼它不會像pops + nts11那樣工作。 75)%) –

0

這另一種解決方案是,你可以嘗試使用分隔符,這樣就可以得到一個字符串的最好的結果,你想成爲。這只是一個選擇。 你可以做這樣的事情:

<pre> 
     string input2 = "pops; +; nts;1.75%"; 
     char c = ';'; 
     string[] i2 = input2.Split(c); 
</pre> 
Hope it helps.