2012-01-18 142 views
1

我试图在Textfile中找到一个字符串。我正在使用RegEx方法。但是我需要将已找到的字符串之前存在的Previous String作为方法输出。我怎样才能做到这一点与C#?任何人都可以给我一些想法?找到一个字符串,但返回前一个字符串

例如:
在该文本文件是'routerbl router0000;'
我在寻找'router0000;',如果我找到'router0000;'然后我想'routerbl'线路。

+1

我们需要可能的字符串,什么应该和不应该匹配并返回什么需要的更多的例子。 – Oded 2012-01-18 10:49:06

回答

4

您有两个pos sibilities

  1. 匹配你想要什么用capturing group,这样

    (\S+)\s+router0000 
    

    的东西,你会发现你的结果捕获组在1

  2. 匹配您的模式,并确保下面的字符串带有lookahead

    \S+(?=\s+router0000) 
    

    这只会匹配你想要的部分。

+0

thx寻求帮助。我正在尝试第二种可能性,现在正在工作。 – user1051723 2012-01-18 15:05:32

-1

假设是一个完整的行的一个示例:

Regex expression = new Regex("(.*) router0000"); 
+0

这匹配'router0000'部分,而不是'routerbl'部分。 – Aphelion 2012-01-18 10:57:41

+0

“我正在搜索'router0000''如果我找到'router0000'那么我想得到'routerbl'。“他希望在该行的开头部分获得该部分。我基于他所说的匹配并返回他想要返回的内容进行匹配。 – Ilion 2012-01-18 10:59:05

+0

其实我想在这种情况下,背后的外观并不是真的需要。 – Ilion 2012-01-18 11:00:52

0

我能想到的两种方式

  • 使用群体(routerbl) (router0000),并使用第一组
  • lookaheadrouterbl (?=router000)
1

它不会回答你的正则表达式的问题,但如果唯一的规则就是一个特定的子字符串之前返回您的字符串的第一部分,那么你可以使用一些更简单的正则表达式比:

string test = "routerbl router0000;"; 
string matchingValue = "router000"; 

int matchingValueIndex = test.IndexOf(matchingValue); 
string leftPart; 
if (matchingValueIndex >= 0) 
{ 
    leftPart = test.Substring(0, matchingValueIndex); 
} 
0

使用表达式(.*)(?=\srouter0000)来查找在router0000文本之前的文本。

string resultString = null; 
try 
{ 
    resultString = Regex.Match(part, @"(.*)(?=\srouter0000)", RegexOptions.Multiline).Value; 
} catch (ArgumentException ex) 
{ 
    // Syntax error in the regular expression 
} 
+0

嗯实际上@stema的解决方案更好,因为它使用'\ S'而不是'。*',但是这个想法是一样的。 – Aphelion 2012-01-18 11:42:02

+1

我认为'。*'是一个更好的答案,因为它假设的提问者没有指定的要求较少。 – 2012-01-18 13:56:03

相关问题