如何使用正则表达式在文本框输入中提取引号和单个单词之间的单词

时间:2016-09-07 22:02:32

标签: c# regex

问题:

Words to extract

所以我有一个文本框,我在其中用引号标记部分标题,如“Lord of”和没有像Dance这样的引号的单个单词。我想提取所有这些(删除引号并将它们拆分成某种列表)所以我可以根据一些radiobutton选择构建SQL命令,哪个部分显示在下面。

反正

到目前为止,我已尝试过:

string pattern1 = "\"(.*?)\"";
MatchCollection col = Regex.Matches(textBox2.Text, @pattern1); //textbox2.Text is same as in picture


List<String> titles_to_query = new List<String> { };

            for (int i = 0; i < col.Count; i++)
            {
                titles_to_query .Add(col[i].Groups[1].Value.ToString()); 
            }

这将提取引号之间的所有标题

但是如何才能在我的列表中找到Dance(没有用引号括起来)?或者如果有人输入 - > “舞蹈之王”朋友

我想在没有朋友的情况下获得Lord and Dance,因为它缺少一个引号......

1 个答案:

答案 0 :(得分:0)

我认为这是做任务的更好方法。我在工作中做了类似的计划,并且做得非常好。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "\"Legend of Tarzan\" \"Lord of Dance\"";
            string pattern = "\"(?'phase'[^\"]+)\"";
            MatchCollection matches = Regex.Matches(input, pattern);
            List<string> wheres = new List<string>();
            foreach (Match match in matches)
            {
                wheres.Add(string.Format("title % '{0}'", match.Groups["phase"].Value));
            }

            string whereClause = string.Format("WHERE {0}", string.Join(" OR ", wheres));

            string SQL = string.Format(
                " SELECT movie_id, ts_headline, title, ts_rank, rank" +
                " FROM movies" +
                " {0}" +
                " ORDER BY rank DESC",
                whereClause);

        }
    }
}