2013-03-05 29 views
0

示例串提取某两个单词之间从右到左侧

This is an important example about regex for my work. 

子串我可以提取关于正则表达式与此(?<=an).*?(?=for)片断重要的例子。 Reference

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

我的意思是提取过程回到途径。

我试过我想要做的下面的代码在其他情况下,但它不工作。

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 |”)我想提取“第二个字符串”但这个例子是我的真正的字符串的小宁静,我的字符串是可改变的。

+0

看到这个http://stackoverflow.com/questions/378415/how-do-i-extract-a-string-of-text-that-lies-between-two-brackets-using-net – Zaki 2013-03-05 11:45:08

+0

谢谢,但该建议部分相似。我想提取字符串回来的方式。 – Kerberos 2013-03-05 11:52:19

+0

也许这是一个选项,以扭转字符串和开始和结束字符串,然后再与正则表达式匹配? – 2013-03-05 11:53:44

回答

0

不需要向前或向后看!你可以只:

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

\s需求的空白,所以你不匹配an进口*有*吨。

+0

谢谢,但我不适合我。 – Kerberos 2013-03-05 12:41:47

0

在当前解决方案的一个潜在问题是,在通过了一串包含特殊字符,这需要与Regex.Escape转义连接前:

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

匹配RL您的其他要求,我不知道了解你的要求。

+0

我的结束字符串是“#Var |”并开始字符串是“ID_304”也有这么多“#Var |”字符串在我的整个字符串。正则表达式。现在逃跑对我来说并不重要。根据这种方法,我想从我的字符串中提取“第二个字符串”而不是“第三个字符串”。我的英文不是很好。我希望这是一个解释 – Kerberos 2013-03-05 12:38:32

+0

@ Kerberos:一场比赛是否可以包含'|'?如果没有,那么有一个解决方案。否则,您需要定义如何搜索匹配。 – nhahtdh 2013-03-05 12:42:22

相关问题