正则表达式:从引号中提取所有单词

时间:2012-09-22 10:52:21

标签: c# regex split

通过使用正则表达式,我如何用双引号提取所有文本,以及用这种字符串中的引号引出所有单词:

01AB "SET 001" IN SET "BACK" 09SS 76 "01 IN" SET

第一个正则表达式应该提取双引号内的所有文本,如

SET 001
BACK
01 IN

第二个表达式shoud提取字符串

中的所有其他单词
01AB
IN
SET
09SS
76
SET

对于第一个案例,工作正常("(.*?)")。如何从引号中提取所有单词?

3 个答案:

答案 0 :(得分:5)

试试这个表达式:

(?:^|")([^"]*)(?:$|")

与之匹配的组将排除引号,因为它们包含在非捕获括号(?:)中。当然,您需要转义双引号以便在C#代码中使用。

如果目标字符串以引用值开始和/或结尾,则此表达式也将匹配空组(对于初始和尾随引号)。

答案 1 :(得分:2)

也许你可以尝试用空字符串替换引号内的单词,如:

Regex r = new Regex("\".*?\"", RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.Singleline);
        string p = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET";

        Console.Write(r.Replace(p, "").Replace("  "," "));

答案 2 :(得分:1)

如果建议你需要所有句子块 - 引用而不是 - 那么有更简单的方法来使用正则表达式来分隔源字符串。拆分

static Regex QuotedTextRegex = new Regex(@"("".*?"")", RegexOptions.IgnoreCase | RegexOptions.Compiled);

var result = QuotedTextRegex
                .Split(sourceString)
                .Select(v => new
                    {
                        value = v,
                        isQuoted = v.Length > 0 && v[0] == '\"'
                    });