/<span[^>]*class=\"link[^>]*params=\"(\d+),(\d+),[^>]*>[^<]*from.*?(\d{1,2})(.*?)(\d{4}).*?(year|Year)[^<]*<\/span>/
这样的字符串:
<p id="p_195" class="s_16" style="text-indent:6pt;"><span class="link s_8" params="65537,21403229,0,195,0,0" onmouseover="this.style.textDecoration='underline';" onmouseout="this.style.textDecoration='none';" onclick="return onClickLink(event, this);">Sometext from 28 september 2013& nbsp;year</span></p>
麻烦在于 september
。可以有一个空格或
。我将regexp更改为:bla-bla-blah... from.*?(\d{1,2})**(& nbsp;|\s)**(.*?)(\d{4}).*?(year|Year) ...bla-bla-blah
(&amp; nbsp;没有空格)
所以,在比赛中我得到了( |\s)
。但我不需要他们!如何在没有匹配的情况下对( |\s)
进行分组?
答案 0 :(得分:1)
你想要一个非捕获组,试试这个:
?(\ d {1,2})(?:&amp; nbsp; | \ s)(。?)(\ d {4})。*?(年|年)
有关详细信息,请参阅Kobi对OP的评论。 What is a non-capturing group? What does a question mark followed by a colon (?:) mean?
小心使用非捕获组。如果您依赖组反向引用索引并突然决定将组更改为非捕获,则所有正则表达式都不支持它们,并且可能会破坏您的后处理代码。我的建议是始终在.Net中使用命名组。