通过使用正则表达式,我如何用双引号提取所有文本,以及用这种字符串中的引号引出所有单词:
01AB "SET 001" IN SET "BACK" 09SS 76 "01 IN" SET
第一个正则表达式应该提取双引号内的所有文本,如
SET 001
BACK
01 IN
第二个表达式shoud提取字符串
中的所有其他单词01AB
IN
SET
09SS
76
SET
对于第一个案例,工作正常("(.*?)")
。如何从引号中提取所有单词?
答案 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] == '\"'
});