c#正则表达式-备选文本
我想获得familyId,在compar/produ.aspx之间有一个替代方案。我使用正则表达式: \/选择器/(比较+produ+).aspx\?famiid=(\d{2})\&produ=\d{2} 这符合: /选择器/比较页.aspx?famiid=32和produ=40 和 /选择器/productCust.aspx?famiid=32和produ=40 第二场比赛我得到了家族ID 实际上,我必须使用()使替代方案成为可能(compar或produ)。问题是我不想在比赛组中获得compario或product 但是,如果删除(),正则表达式的行为将不同:/selector/不是选择的一部分:( 我怎样才能摆脱()而只得到家庭IDc#正则表达式-备选文本,c#,regex,C#,Regex,我想获得familyId,在compar/produ.aspx之间有一个替代方案。我使用正则表达式: \/选择器/(比较+produ+).aspx\?famiid=(\d{2})\&produ=\d{2} 这符合: /选择器/比较页.aspx?famiid=32和produ=40 和 /选择器/productCust.aspx?famiid=32和produ=40 第二场比赛我得到了家族ID 实际上,我必须使用()使替代方案成为可能(compar或produ)。问题是我不想在比赛组中获得comp
谢谢为什么要摆脱它们?只需使用第二个匹配组,否则您可以使用如下命名的匹配组:
\/selector/(?<pageName>compar.+|produ.+).aspx\?famiid=(?<familyId>\d{2})\&produ=\d{2}
\/selector/(?compar.+|produ.+).aspx\?famiid=(?\d{2})\&produ=\d{2}
返回的匹配组可以通过类似名称的组[“familyId”]进行访问。为什么要删除它们?只需使用第二个匹配组,或者您可以使用如下命名的匹配组:
\/selector/(?<pageName>compar.+|produ.+).aspx\?famiid=(?<familyId>\d{2})\&produ=\d{2}
\/selector/(?compar.+|produ.+).aspx\?famiid=(?\d{2})\&produ=\d{2}
返回的匹配组可以通过类似组[“familyId”]的名称进行访问。您可以使用以下语法指定一个组:(?:…)
因此,您的模式成为(?:compar.+|produ.+)
不清楚为什么不使用页面的全名,除非存在具有相同前缀的其他页面。如果是这样,更好的模式可能是:
@"/selector/(?:compar|produ)[^.]+\.aspx\?famiid=(\d+)&produ=\d+";
通过使用[^.]+
它将匹配除句点以外的所有字符。另外,为什么要将数字限制为两个?如果有一个或多个呢?\d+
更灵活,除非您打算将其限制为长度为2的ID。您可以使用以下语法指定一个:(?:…)
因此,您的模式成为(?:compar.+|produ.+)
不清楚为什么不使用页面的全名,除非存在具有相同前缀的其他页面。如果是这样,更好的模式可能是:
@"/selector/(?:compar|produ)[^.]+\.aspx\?famiid=(\d+)&produ=\d+";
通过使用
[^。]+
它将匹配除句号以外的所有字符。另外,为什么要将数字限制为两个?如果有一个或多个呢?\d+
更灵活,除非您打算将其限制为长度为2的ID。实际上,出于一般原因,我只需要一个匹配组。我理解您只需要一个;我的观点是,使用mor不会损害任何东西不止一个,只使用你需要的一个。谢谢你们的帮助。我通过只问一个问题学到了两件不同的事情:事实上,出于一般原因,我只需要一个比赛小组。我理解你只需要一个;我的观点是,拥有不止一个,只使用你需要的一个,不会伤害任何东西。谢谢你们的帮助。通过只问一个问题,我学到了两件不同的事情:P记下这个作为答案;我的答案很有趣,但我不知道?:诀窍。@Paul你的慷慨很感激。很高兴你发现它很有用。我对你的回答投了更高的票,因为这是一个很有用的策略,可以挑出特定的群体。你是对的,这个模式必须与前面的页面匹配由compar混合-例如compario.asp、comparioCust.apsx等,将此作为答案;我的答案很有趣,但我不知道?:诀窍。@Paul非常感谢你的慷慨。很高兴你发现它很有用。我对你的回答投了赞成票,因为这是一个很有用的策略,可以挑出特定的组。你是对的,模式必须匹配前缀为b的页面y compar-例如compario.asp、comparioCust.apsx等