从右到左提取两个特定单词之间的子字符串

时间:2013-03-05 11:43:18

标签: c# regex

示例字符串

This is an important example about regex for my work.

我可以使用此(?<=an).*?(?=for)代码段提取有关正则表达式的重要示例Reference

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

我的意思是提取过程可以回过头来。

我在其他情况下尝试了我想要做的以下代码,但它不起作用。

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”但是这个例如,我真正的字符串很平静,我的字符串也可以改变。

2 个答案:

答案 0 :(得分:0)

无需前进或后退!你可以:

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

\s要求空格,因此您不匹配an import * an * t。

答案 1 :(得分:0)

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

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

对于匹配RL的其他要求,我不了解您的要求。