0

示例字符串

This is an important example about regex for my work.

我可以用这个片段提取关于正则表达式的重要示例。参考(?<=an).*?(?=for)

但我想从右到左提取字符串。根据这个问题的例子;第一个位置必须是 (for) 第二个位置必须是 (an)。

我的意思是提取过程可以恢复。

在 else İf 情况下,我尝试了我想做的如下代码,但它不起作用。

public string FnExtractString(string _QsString, string _QsStart, string _QsEnd, string _QsWay = "LR")
        {
            if (_QsWay == "LR")
                return Regex.Match(_QsString, @"(?<=" + _QsStart + ").*?(?=" + _QsEnd + ")").Value;
            else if (_QsWay == "RL")
                return Regex.Match(_QsString, @"(?=" + _QsStart + ").*?(<=" + _QsEnd + ")").Value;
            else
                return _QsString;
        }

提前致谢。

编辑

我的真实示例如下

#Var|First String|ID_303#Var|Second String|ID_304#Var|Third String|DI_t55

当我将两个字符串传递给我的方法时(例如"|ID_304" 和 "#Var|"),我想提取"Second String"但这个例子与我的真实字符串并没有什么不同,而且我的字符串是可变的。

4

2 回答 2

0

无需向前或向后看!你可以:

(.*)\san\s.*\sfor\s

要求空格,\s所以你不匹配animport*an*t。

于 2013-03-05T11:55:54.270 回答
0

当前解决方案中的一个潜在问题是传入的字符串包含特殊字符,需要Regex.Escape在连接之前对其进行转义:

return Regex.Match(_QsString, @"(?<=" + Regex.Escape(_QsStart) + ").*?(?=" + Regex.Escape(_QsEnd) + ")").Value;

对于您的其他匹配要求RL,我不明白您的要求。

于 2013-03-05T12:28:19.167 回答