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执行此操作的最佳方法是什么?
在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);
}