正则表达式非捕获组被忽略了?

时间:2014-12-23 11:07:03

标签: c# regex

我有一个这样的字符串:

  <Field ID="{2B35B1DD-822A-47E2-9F8C-77006123FA45}"
       Name="NCPE_QualificationTitle"
       StaticName="NCPE_QualificationTitle"
       DisplayName="$Resources:Exigy.NCPE.ProfessionalDirectory.Structure,Fields_NCPE_QualificationTitle_DisplayName;"
       Description="$Resources:Exigy.NCPE.ProfessionalDirectory.Structure,Fields_NCPE_QualificationTitle_Description;"
       Group="$Resources:Exigy.NCPE.ProfessionalDirectory.Structure,NCPE_Group;"
       Type="Text"
    Required="FALSE" />

我试图使用这个正则表达式:

(?:\$Resources:.*,).*(?:;)

我认为应该给我Fields_NCPE_QualificationTitle_DisplayName,因为它是非捕获组中的唯一部分。但它匹配此字符串:

"$Resources:Exigy.NCPE.ProfessionalDirectory.Structure,Fields_NCPE_QualificationTitle_DisplayName;"

我在做什么/理解错误?

2 个答案:

答案 0 :(得分:1)

您只需将第一个非捕获组转为正向后方(?<=...),将第二个转为正向前方(?=...)

(?<=\$Resources:.*,).*(?=;)

IDEONE

Regex rgx = new Regex(@"(?<=\$Resources:.*,).*(?=;)");

默认情况下,它会打印Groups[0]即索引0,其中包含所有匹配的字符。

答案 1 :(得分:0)

(?:\$Resources:.*,)(.*)(?:;)

尝试此操作并从中获取捕获或组1。参见演示。

https://regex101.com/r/vN3sH3/68

您的正则表达式不会对任何数据进行分组,因此会返回完整匹配。一旦您引入了一个组,您就可以通过指定组1或组2来访问它