Regex模式用于2个字符串之间的文本

本文关键字:之间 文本 字符串 2个 模式 用于 Regex | 更新日期: 2023-09-27 18:30:07

我正在尝试提取以下模式中的所有文本(显示为xxxx):

Session["xxxx"]

使用c#

这可能是Request.Querystring["xxxx"],所以我试图动态地构建表达式。当我这样做的时候,我会遇到各种各样的问题,比如没有人陪同或没有比赛:(

一个例子可能是:

string patternstart = "Session[";
string patternend = "]";
string regexexpr = @"''" + patternstart + @"(.*?)''" + patternend ;
string sText = "Text to be searched containing Session['"xxxx'"] the result would be xxxx";
MatchCollection matches = Regex.Matches(sText, @regexexpr);

有人能帮我吗,因为我被难住了(就像我在RegEx:))

Regex模式用于2个字符串之间的文本

只需对代码进行一些小修改。

string patternstart = Regex.Escape("Session[");
string patternend = Regex.Escape("]");
string regexexpr = patternstart + @"(.*?)" + patternend;

您在示例中构建的模式如下所示:

''Session[(.*?)'']

这有几个问题。首先,它假设字符串以一个字面反斜杠开始,其次,它将整个(.*?)包装在一个字符类中,这意味着它将匹配任何一个左括号、句点、星号、问号、右括号或反斜杠。如果您想匹配一个文本[,您需要转义模式中的括号。

你可以使用这样的模式:

Session'[(.*?)]

例如:

string regexexpr = @"Session'[(.*?)]";
string sText = "Text to be searched containing Session['"xxxx'"] the result would be xxxx";
MatchCollection matches = Regex.Matches(sText, @regexexpr);
Console.WriteLine(matches[0].Groups[1].Value); // "xxxx"

字符[]在正则表达式中具有特殊含义-它们定义了一个组,其中包含的一个字符必须匹配。要解决这个问题,只需用一个前导字符"转义"它们:

string patternstart = "Session'[";
string patternend = "']";

一个"最后字符串"的例子可能是:

Session'["(.*)"']

然而,如果需要的话,你可以很容易地编写RegEx来自动处理Session、Querystring等(而无需匹配你扔给它的每一个其他数组),并避免首先构建字符串:

(Querystring|Session|Form)'["(.*)"']

然后进行第二场比赛。