我已经创建了一个从开始“结尾是”,例如,正则表达式的正则表达式的字符串的正则表达式:“mynameis”如何限制采取某些词
“\”(?:[^ \“\ \] |。\\)* \“”。?
现在我想,这个表达式不能采取{我们,我们,他们,以及}话 我如何做到这一点 举例来说,如果我输入“mynameisalexand “ 编译器必须忽略{和}并将此字符串视为”mynameisalex“
我已经创建了一个从开始“结尾是”,例如,正则表达式的正则表达式的字符串的正则表达式:“mynameis”如何限制采取某些词
“\”(?:[^ \“\ \] |。\\)* \“”。?
现在我想,这个表达式不能采取{我们,我们,他们,以及}话 我如何做到这一点 举例来说,如果我输入“mynameisalexand “ 编译器必须忽略{和}并将此字符串视为”mynameisalex“
因为没有办法,以配合正则表达式非连续文本,你仍然可以使用你的正则表达式或展开一个:
"[^"\\]*(?:\\.[^"\\]*)*"
,并删除你定义的子仅仅是String.Replace
(或者像we|and|...
那样的正则表达式)。
见C# 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);
}
之后您需要清理字符串;正则表达式只是不够强大。
事实上,你得到的是一个上下文无关的语法!如果我们将可接受的令牌称为'id',那么您已经定义了一种看起来像这样的语言;
id (('and'|'we'|'us') id?)*
也就是说,至少有一个id;那么字and
,we
或us
,然后另一个可能的ID,也许。整个事情然后重复,让您匹配
mynameisandrewbutheyarebothcalledsarah
为 ID:mynameis '和' ID:rewbut '他们' ID:arebothcalledsarah
所以,这是什么是已知的作为一种上下文无关语言,正则表达式无法解析这种事情。你最好的选择是把不可接受的词分开,最后把它们拼在一起。
如果输入的是' “mynamesarealexandandrew”'?它应该是“mynamesarealexrew”吗? –
是啊!只是作为一个例子。还有其他的话我会限制。我只是需要一个主意! – Ali
难道你不能在捕获的字符串上使用通常的字符串操作方法吗? –