2

可能重复:
如何忽略正则表达式主题字符串中的空格?

我正在使用以下内容:

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

匹配:

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

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

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

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

4

4 回答 4

2

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

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

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

于 2012-12-20T15:24:56.543 回答
0

您可以使用 Negative lookahead 断言(?!\s),这样如果有空格它就不会匹配......

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

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

于 2012-12-20T15:25:04.107 回答
0

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

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

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

于 2012-12-20T15:25:10.180 回答
0

这有点时髦,可能不是最好的,但它是这样的:

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

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

于 2012-12-20T15:25:54.460 回答