Regex:选择某个位置没有组值的字符串

本文关键字:字符串 位置 选择 Regex | 更新日期: 2023-09-27 18:24:59

以下是我要做的:

我有一个输入文本,看起来像这样:

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";)。我事先不知道其他值是多少。

使用regex执行此操作的最佳方法是什么?

Regex:选择某个位置没有组值的字符串

在Linq&Regex

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();

您可以使用regex负前瞻

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";

您正在寻找这样的模式吗?

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);
}