2012-02-18 18 views
0

下面一組值的字符串就是我想要做的事:正則表達式:選擇不具備在某些地方

我有一個輸入文本,它看起來是這樣的:

object("a").style.display="none"; 
object("b").style.display="none"; 
object("c").style.display="none"; 
object("d").style.display="none"; 
object("e").style.display="none"; 
object("g").style.display="block"; 
object("h").style.display="none"; 

我想選擇所有行,其中.style.display!=「none」(在這種情況下,object(「g」).style.display =「block」;)。我事先不知道其他價值是什麼。

使用正則表達式做這件事的最好方法是什麼?

+0

這是在C#程序?那麼你真的需要使用正則表達式嗎? – 2012-02-18 16:02:17

回答

1

隨着LINQ的&正則表達式

var arr = Regex.Matches(myregexstr, @"(object\(""\w+""\)\.style\.display\=)""(\w+)""") 
      .Cast<Match>() 
      .Where(m => m.Groups[2].Value != "none") 
      .Select(m=>m.Groups[0].Value) 
      .ToArray(); 
1

幫助下,你可以使用regex negative lookahead

Python的例子(對不起,沒有提供一個C#現在):

import re 

text = """ 
any text 
another text 
object("a").style.display="none"; 
object("b").style.display="none"; 
object("c").style.display="none"; 
object("d").style.display="none"; 
object("e").style.display="none"; 
object("g").style.display="block"; 
object("h").style.display="none"; 
""" 

pattern = r"^object\(\"\w+\"\)\.style\.display\=\"(?!none).*?\";$" 

for i in re.findall(pattern, text, re.MULTILINE): 
    print i 

# >> object("g").style.display="block"; 
1

是你在尋找這樣的模式嗎?

object\("[^"]+"\)\.style\.display\="none";(\r\n)?

C#單元測試:

[Test] 
public void Test() 
{ 
    string input = @"object(""a"").style.display=""none""; 
object(""b"").style.display=""none""; 
object(""c"").style.display=""none""; 
object(""d"").style.display=""none""; 
object(""e"").style.display=""none""; 
object(""g"").style.display=""block""; 
object(""h"").style.display=""none"";"; 

    Regex pattern = new Regex(@"object\(""[^""]+""\)\.style\.display\=""none"";(\r\n)?"); 

    string expected = "object(\"g\").style.display=\"block\";\r\n"; 

    string actual = pattern.Replace(input, string.Empty); 

    Assert.AreEqual(expected, actual); 
}