2012-03-08 4 views
0

ユーザーがテキストボックスにテキストを入力できるような機能が必要です。いくつかの定義済み文字に基づいて、ユーザーをリンクできるさまざまな属性を特定する必要があります。たとえば :として入力するテキストボックスのユーザーの場合:このデータから、今いくつかの文字に基づいたテキストボックスからの自動キャプチャ値

を「!あなたが1優先順位を持っている#Desktopで作業しようとしているこんにちは@Sunil」 、私は開発者の名前を抽出したいですつまり、@ sunilに基づいています。 #charに基づくチームの名前、デスクトップの優先順位、およびタスクの優先順位!!charは1に基づいています。

このデータは、タスク管理に使用されるWebサイトに入力され、管理者はこれを入力します... そうすれば、それは管理者のためのタスクの高速入力になります。

私はデータを分割して処理することができますが、あまりにも多くの順列と組み合わせがあり、順序の文字(#、@ ,!)を入力できます。

私はこのような何かを試してみましたが、それは助けたdidntの:文ごとに複数のタグが存在する場合

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

+0

@gbianchi - はい、それは、構文解析する前に文字が存在するかどうかを確認する条件付きロジックを追加するのは簡単です。 – Coltech

+0

確かに私の2セント;) – gbianchi

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; 
     } 
関連する問題