如何使用正则表达式和c#忽略字符串中的其他空格?

时间:2012-12-20 15:21:35

标签: c#

  

可能重复:
  How to ignore whitespace in a regular expression subject string?

我使用以下内容:

"<a href=\"(.+?)\">(.+?)</a>"

匹配:

"<a href="x">xx</a>"

但有时我的用户会输入以下内容:

"<a   href="x" >xx</a>"
"<a href="x">xx</a>"
"<a href="x"   >xx</a>"

如何修改正则表达式,使其匹配上面三个字符串中的一个或多个空格?

4 个答案:

答案 0 :(得分:2)

一种解决方案是添加\s*空格是合法的但不是必需的,\s+位于需要空格的地方,如下所示:

<a\\s+href\\s*=\\s*\"([^\"]*)\"\\s*>([^<]*)</a>

另一方面,这正是为什么不应该尝试用正则表达式解析XML或HTML的一个例子:它只是一个错误的工具。使用.NET中提供的几种XML解析技术之一将提供更好的替代方案。

答案 1 :(得分:0)

您可以使用否定前瞻断言(?!\s),以便在有空格时不匹配...

<a (?!\s)href=\"(?!\s)(.+?)\"(?!\s)>(?!\s)(.+?)</a>

但是,从需要添加的次数来看,您可以看到使用正则表达式可能不是正确的方法。

答案 2 :(得分:0)

您想要的符号是+。将匹配一个或多个空格。

<a +href=\"(.+?)\" *>(.+?)</a>

但是,通过正则表达式解析html通常是一个坏主意。

答案 3 :(得分:0)

这有点时髦,可能不是最好的,但在这里:

string.Join(" ", s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries))

编辑:(我知道它不是正则表达式)