我创建了一个正则表达式Regex for string from"并以"结束例如:" mynameis"
" \"(?:[^ \" \\] | \\)* \""
现在我想要这个表达式不能采用{we,us,they和}单词。 我怎么做? 例如,如果我输入" mynameisalexand" 编译器必须忽略{和}并将此字符串作为" mynameisalex"
答案 0 :(得分:1)
由于无法将非连续文本与正则表达式匹配,您仍然可以使用正则表达式或展开的正则表达式:
"[^"\\]*(?:\\.[^"\\]*)*"
并删除仅使用String.Replace
(或使用we|and|...
等正则表达式)定义的子字符串。
请参阅regex demo:
var input = "\"mynamesarealexandandrew\" \"mynameisalexand\"";
var regex = new Regex(@"""[^""\\]*(?:\\.[^""\\]*)*""", RegexOptions.IgnorePatternWhitespace);
var results = regex.Matches(input).Cast<Match>()
.Select(p => p.Value.Replace("we", "")
.Replace("us", "")
.Replace("they", "")
.Replace("and", ""))
.ToList();
foreach (var s in results) // DEMO
{
Console.WriteLine(s);
}
答案 1 :(得分:0)
之后你需要清理绳子;正则表达式不够强大。
事实上,你所获得的是无语境语法!如果我们将您的可接受令牌称为“ID”,那么您已经定义了一种类似于此的语言;
id (('and'|'we'|'us') id?)*
即,至少一个id;然后是单词and
,we
或us
,然后是另一个可能的ID。然后整个事情重复,让你匹配
mynameisandrewbutheyarebothcalledsarah
如 id:mynameis &#39;和&#39; id:重写 &#39;他们&#39; id:arebothcalledsarah
因此,这就是所谓的无上下文语言,正则表达式无法解析这类事情。你最好的选择是分开不可接受的单词,最后将它们拼接在一起。