Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#正则表达式-备选文本_C#_Regex - Fatal编程技术网

c#正则表达式-备选文本

c#正则表达式-备选文本,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

我想获得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/不是选择的一部分:(

我怎样才能摆脱()而只得到家庭ID


谢谢

为什么要摆脱它们?只需使用第二个匹配组,否则您可以使用如下命名的匹配组:

\/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等