2012-03-08 51 views
0

我想要一個功能,其中用戶可以在文本框中輸入一些文本,並且基於某些預定義的字符,我必須識別用戶可以鏈接的不同屬性。 例如:在文本框中用戶輸入爲: 「你好@Sunil你要在#Desktop具有的優先工作1!」基於某些字符的文本框自動捕獲值

從這個數據

現在,我想提取的開發者的姓名,即基於@ ..這是sunil。 基於#char的團隊名稱,這是桌面..和任務的優先級,基於!char是1.

該數據將被輸入到網站上,用於任務管理,管理員將輸入此... 因此,它成爲任務的快速輸入...管理員。

我可以拆分數據並對其進行處理......但是有太多的排列和組合可以輸入順序字符(#,@,!)。

我想這樣的事情,但它沒有幫助:

if (TitleText.Contains("#") && TitleText.Contains("@") && TitleText.Contains("!")) 
{ 

     string[] arr = TitleText.Split('#', '@', '!'); 
     title = arr[0]; 
     devName = arr[1].Trim().ToLower(); 
     devTeam = arr[2].Trim().ToLower(); 
     prio = Convert.ToInt32(arr[3]); 
    } else if (TitleText.Contains("#") && TitleText.Contains("@")) { 
     string[] arr = TitleText.Split('#', '@'); 
     title = arr[0]; 
     devName = arr[1].Trim().ToLower(); 
     devTeam = arr[2].Trim().ToLower(); 
     // prio = Convert.ToInt32(arr[3]); 
    } else if (TitleText.Contains("#") && TitleText.Contains("!")) { 
     string[] arr = TitleText.Split('#', '!'); 
     title = arr[0]; 
     devName = arr[1].Trim().ToLower(); 
     //devTeam = arr[2]; 
     prio = Convert.ToInt32(arr[2]); 
    } else if (TitleText.Contains("@") && TitleText.Contains("!")) { 
     string[] arr = TitleText.Split('@', '!'); 
     title = arr[0]; 
     // devName = arr[1]; 
     devTeam = arr[1].Trim().ToLower(); 
     prio = Convert.ToInt32(arr[2]); 
    } else if (TitleText.Contains("#")) { 
     string[] arr = TitleText.Split('#'); 
     title = arr[0]; 
     devName = arr[1].Trim().ToLower(); 
     //devTeam = arr[1]; 
     //prio = Convert.ToInt32(arr[2]); 
    } else if (TitleText.Contains("@")) { 
     string[] arr = TitleText.Split('@'); 
     title = arr[0]; 
     // devName = arr[1]; 
     devTeam = arr[1].Trim().ToLower(); 
     //prio = Convert.ToInt32(arr[2]); 
    } else if (TitleText.Contains("!")) { 
     string[] arr = TitleText.Split('!'); 
     title = arr[0]; 
     // devName = arr[1]; 
     //devTeam = arr[1]; 
     prio = Convert.ToInt32(arr[1]); 
    } 

回答

1

嘗試用正則表達式

string Name=Regex.Match(SubjectString, "@(.*?) ").Groups[1].Value; 
string Comp=Regex.Match(SubjectString, "#(.*?) ").Groups[1].Value; 
string Priort=Regex.Match(SubjectString, "!(.*?) ").Groups[1].Value; 
1

如果每個句子多個標籤,這是行不通的。但它確實對你的工作提供的示例:

 string TitleText = "Hello @Sunil you are going to work on #Desktop which has a priority of !1 "; 
     string title; 
     string devname; 
     string devteam; 

     title = TitleText.Substring(TitleText.IndexOf("#")+1); 
     title = title.Substring(0,title.IndexOf(" ")); 

     devname = TitleText.Substring(TitleText.IndexOf("@") + 1); 
     devname = devname.Substring(0, devname.IndexOf(" ")); 

     devteam = TitleText.Substring(TitleText.IndexOf("!") + 1); 
     devteam = devteam.Substring(0, devteam.IndexOf(" ")); 
+0

這將拋出一個錯誤,如果任何搜索字符的不存在。 – gbianchi 2012-03-08 13:13:46

+0

@gbianchi - 是的,它會增加條件邏輯以檢查解析之前是否存在字符,這將是微不足道的。 – Coltech 2012-03-08 13:17:44

+0

肯定只有我的兩美分;) – gbianchi 2012-03-08 13:19:03

1
static void Main(string[] args) 
     { 
      var text = "Hello @Sunil you are going to work on #Desktop which has a priority of !1"; 
      var devPattern = new Regex(@"\@([^\s]+)"); 
      var teamPattern = new Regex(@"#([^\s]+)"); 
      var priorityPattern = new Regex(@"\!([0-9]+)"); 

      var team = ExtractValue(text, teamPattern); 
      var dev = ExtractValue(text, devPattern); 
      var priority = ExtractValue(text, priorityPattern); 
     } 
     private static string ExtractValue(string input, Regex regex) 
     { 
      return regex.IsMatch(input) ? regex.Match(input).Groups[1].ToString() : null; 
     }