我有一个这样的字符串:
<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;"
我在做什么/理解错误?
答案 0 :(得分:1)
您只需将第一个非捕获组转为正向后方(?<=...)
,将第二个转为正向前方(?=...)
。
(?<=\$Resources:.*,).*(?=;)
Regex rgx = new Regex(@"(?<=\$Resources:.*,).*(?=;)");
默认情况下,它会打印Groups[0]
即索引0,其中包含所有匹配的字符。
答案 1 :(得分:0)
(?:\$Resources:.*,)(.*)(?:;)
尝试此操作并从中获取捕获或组1。参见演示。
https://regex101.com/r/vN3sH3/68
您的正则表达式不会对任何数据进行分组,因此会返回完整匹配。一旦您引入了一个组,您就可以通过指定组1或组2来访问它