如何限制正则表达式使用某些单词

时间:2016-03-26 10:57:44

标签: c# regex

我创建了一个正则表达式Regex for string from"并以"结束例如:" mynameis"

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

现在我想要这个表达式不能采用{we,us,they和}单词。 我怎么做? 例如,如果我输入" mynameisalexand" 编译器必须忽略{和}并将此字符串作为" mynameisalex"

2 个答案:

答案 0 :(得分:1)

由于无法将非连续文本与正则表达式匹配,您仍然可以使用正则表达式或展开的正则表达式:

"[^"\\]*(?:\\.[^"\\]*)*"

请参阅http://prntscr.com/ak825u

并删除仅使用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;然后是单词andweus,然后是另一个可能的ID。然后整个事情重复,让你匹配

mynameisandrewbutheyarebothcalledsarah

如    id:mynameis    &#39;和&#39;    id:重写    &#39;他们&#39;    id:arebothcalledsarah

因此,这就是所谓的无上下文语言,正则表达式无法解析这类事情。你最好的选择是分开不可接受的单词,最后将它们拼接在一起。