基于某些字符的文本框中的自动捕获值

时间:2012-03-08 12:47:12

标签: c# asp.net

我想要一个功能,用户可以在文本框中输入一些文本,并且基于一些预定义的字符,我必须识别用户可以链接到的不同属性。 例如:在文本框中,用户输入为: “你好@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]);
    }

3 个答案:

答案 0 :(得分: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(" "));

答案 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;

答案 2 :(得分: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;
        }