2012-12-09 46 views
1

需要拆分不同材質組合的字符串。需要使用reg表達式提取所有材料。根據正則表達式拆分字符串

可能的輸入有

65%POLYESTER 30%COTTON 5%WOOL 
95% COTTON DENIM 5% OTHERS 
100% HS POLYPROPYLENE 
100% POLYPROPYLENE HEATSET 

輸出應該是

65% Polyester 
30% Cotton 
5% wool 

試過這種

static IList<string> SplitContent(string input) 
     { 
      var list = new List<string>(); 
      var regex = new Regex("\\d*\\.\\d+%?[A-Za-z \\s]"); 
      var matches = regex.Matches(input); 
      foreach (Match item in matches) 
      { 
       list.Add(item.Value); 
      } 
      return list; 
     } 

但它不返回任何比賽。有人可以幫忙嗎?

回答

3

一個更好的方式是

List<string> output=Regex.Matches(yourInput,@"\d+(\.\d+)?%?[a-zA-Z\s]+") 
         .Cast<Match>() 
         .Select(x=>Regex.Replace(x.Value,@"(%)(?=\S)","$1 ")) 
         .ToList(); 

\d+比賽1對多位數

(\.\d+)?點和1對多位數0匹配1次(?

[a-zA-Z\s]+與該類別1中的任何字符匹配多次..

01當有一個特點,它已不是

比賽將打破或當你來到結束的字符串

+0

它工作正常。謝謝 – Naresh

+0

@ Some1.Kill.The.DJ:你能解釋一下你的正則表達嗎? –

+0

@BhushanFrake查看編輯...;) – Anirudha

3

使小數分隔.可選的,說明部分更改爲「什麼,但空間」,像這樣:

var regex = new Regex("\\d*(?:\\.)?\\d+%?[^\\s]+"); 

程序的其餘部分工作正常,並且不需要任何修改(link to ideone) 。

+0

它僅返回%值。這不是與他們聯繫的材料。例如,如果我通過'95%棉布牛仔布5%其他',它會返回95%和5%。但預期的產量是'95%棉花牛仔布'和'5%其他' – Naresh

+0

將其改爲'\\ d *(?:\\。)?\\ d +%?[* A-Za-z \ s] +「,並且它與相關的值一起返回。謝謝。 – Naresh

+0

@Naresh我強烈推薦使用逐字串:'@「\ d *(?:\。)?\ d +%?[* A-Za-z \ s] +」'。還有(@dasblinkenlight)'[^ \ s] == \ S'和(這只是一個替代建議,選擇你認爲更容易讀取的任何一個),可以寫'[。]'而不是'\ .'。 –

0
 string ip = "65%POLYESTER 30%COTTON 5%WOOL 95%COTTON DENIM 5%OTHERS 100%HS POLYPROPYLENE 100%POLYPROPYLENE HEATSET"; 
     List<string> lst = new List<string>(); 
     lst = SplitContent(ip); 
     foreach (var item in lst) 
     { 
      string[] arr=item.Split('%'); 

      Console.WriteLine(arr[0]+"% "+arr[1]); 
     } 

在你SplitContent功能,你已經得到了正則表達式incorrect.It應該如下:

 public static List<string> SplitContent(string input) 
    { 
     var list = new List<string>(); 
     var regex = new Regex("\\d*\\%[A-Za-z]*"); 
     var matches = regex.Matches(input); 
     foreach (Match item in matches) 
     { 
      list.Add(item.Value); 
     } 
     return list; 
    } 

希望這有助於... !!

相關問題