.net 正则表达式问题。找到需要的字符串

.net 正则表达式问题。找到需要的字符串,.net,regex,.net,Regex,输入字符串为 @"SomeCall(Resource.T(""String )))1""), ""String 2"", ""String 3"");" 我只想得到“String 2”和“String 3”,*但不是“String”))1“ 我用这个表达: (?<!Resource\.T)("(?:\.|[^\"])*") 目前:)(?(?您的后视功能不太正确,这就是它不起作用的原因。请将其更改为: (?<!Resource\.T\() 因此,我们在字符串末尾检查是否有另一

输入字符串为

@"SomeCall(Resource.T(""String )))1""), ""String 2"", ""String 3"");"
我只想得到
“String 2”
“String 3”
,*但不是
“String”))1“

我用这个表达:

 (?<!Resource\.T)("(?:\.|[^\"])*")

目前:)

(?
(?您的后视功能不太正确,这就是它不起作用的原因。请将其更改为:

 (?<!Resource\.T\()
因此,我们在字符串末尾检查是否有另一个
,如果有,确保有第二个。

我认为这是最普遍的方式(可能不是最好的性能导向方式)。

您的后视不太正确,这就是它不起作用的原因。将其更改为:

 (?<!Resource\.T\()
因此,我们在字符串末尾检查是否有另一个
,如果有,确保有第二个。

我认为这是最普遍的方式(可能不是最好的性能导向方式)。

正如Loamhoof所说,您需要添加“(”但是,正如您所看到的,第一个匹配是字符串1的结束引号与字符串2的开始引号匹配。如果您知道字符串中没有逗号,可以通过排除逗号进行匹配:

(?<!Resource\.T\()("[^,"]*")

(?正如Loamhoof所说,您需要在负回溯中添加“(”。但是,正如您所看到的,第一个匹配是字符串1的结束引号与字符串2的开始引号匹配。如果您知道字符串中没有逗号,可以通过排除逗号进行匹配:

(?<!Resource\.T\()("[^,"]*")

(?再想一想,我认为真正的问题是必须使用“坏”资源.T字符串,因此不应使用零宽度断言。这就是丢弃开头和结尾引号的原因。如果将任何资源.T match包含在非捕获组中,则只应取回其他资源:

(?:Resource\.T\("[^"]*"\))|("[^"]*")

再想一想,我认为真正的问题是必须使用“坏”资源.T字符串,因此不应使用零宽度断言。这就是丢弃开头和结尾引号的原因。如果将任何资源.T match包含在非捕获组中,则只应取回其他资源:

(?:Resource\.T\("[^"]*"\))|("[^"]*")

输入格式有多严格?
这样行吗

@“SomeCall\(Resource.T\([^“]*”),([^“]*),([^“]*),”;“

如果输入字符串的格式始终与示例相同,则无需使用复杂的lookaround正则表达式。

如果不是,当然,这将不起作用。

输入格式有多严格?
这样行吗

@“SomeCall\(Resource.T\([^“]*”),([^“]*),([^“]*),”;“

如果输入字符串的格式始终与示例相同,则无需使用复杂的lookaround正则表达式。

如果不是,当然,这不会起作用。

任意嵌套的
()
-正则表达式不是一个很好的解决方案。或者我是否错误地理解了规则?没关系。这是一个简化的示例,也不起作用:)任意嵌套的
()
-regex并不是一个很好的解决方案。或者我对规则的理解有误吗?没关系。这是一个简化的示例,也不起作用:)如果你在类中添加了
,为什么还要保留查找功能?如果你添加了
在课堂上,为什么要费心留心?是的,你是对的。我修复并实现了“,”,“结果:)这不是我想要看到的结果)是的,考虑到你的情况,这很正常,我会尝试给你一个足够好的解决方案,编辑。看起来像解决方案:):)非常感谢!至少我不能让它不工作,而且所有的单元测试都工作得很好!:)再次感谢你。是的,你说得对。我修正并实现了“,”,“结果:)这不是我想要看到的结果)是的,考虑到你的情况,这很正常,我会尝试给你一个足够好的解决方案,编辑。看起来像解决方案:):)非常感谢!至少我不能让它不工作,而且所有的单元测试都工作得很好!:)再次感谢你,所以。。我认为这是一个糟糕的解决方案。因为字符串仍然可以包含“,”:(实际上它可以是您想要的任何字符串。所以..我认为这是一个糟糕的解决方案。因为字符串仍然可以包含“,”:(实际上它可以是您想要的任何字符串)。
(?<!Resource\.T\()("[^,"]*")
(?:Resource\.T\("[^"]*"\))|("[^"]*")