c#备选文本
本文关键字:文本 | 更新日期: 2023-09-27 17:58:27
我想获得familyId,compar/produ.aspx之间有一个替代方案。我使用正则表达式:
''/选择器/(compar.+|produ.+).aspx ''?familyid=(''d{2})''''amp;produ=''d{2}
匹配:/selector/comparioPage.aspx?familyid=32&produ=40和/选择器/productCust.aspx?familyid=32&produ=40
并且我得到familyId作为第二个匹配。
事实上,我不得不使用()来使替代方案(compar或produ)成为可能。问题是我不想在匹配组中获得compario或product。
但是,如果我删除(),正则表达式的行为会有所不同:/selector/不是选择的一部分:(
我怎样才能摆脱(),只得到家庭ID?
感谢
您可以使用以下语法指定非捕获组:(?:...)
所以你的模式变成(?:compar.+|produ.+)
目前尚不清楚您为什么不使用页面的全名,除非存在具有相同前缀的其他页面。如果是这样的话,更好的模式可能是:
@"/selector/(?:compar|produ)[^.]+'.aspx'?famiid=('d+)&produ='d+";
通过使用[^.]+
,它将匹配除句点之外的所有内容。此外,为什么要将数字限制在两位?如果有一个或多个呢?'d+
更灵活,除非您打算将其限制为长度为2的ID。
为什么要去掉它们?只需选择第二个匹配组,否则您可以使用一个命名的匹配组,如下所示:
'/selector/(?<pageName>compar.+|produ.+).aspx'?famiid=(?<familyId>'d{2})'&produ='d{2}
返回的匹配组可以通过类似组的名称["familyId"]访问