可能重复:
如何忽略正则表达式主题字符串中的空格?
我正在使用以下内容:
"<a href=\"(.+?)\">(.+?)</a>"
匹配:
"<a href="x">xx</a>"
但是有时我的用户会输入以下内容:
"<a href="x" >xx</a>"
"<a href="x">xx</a>"
"<a href="x" >xx</a>"
如何修改正则表达式,使其匹配上述三个字符串中的一个或多个空格?
可能重复:
如何忽略正则表达式主题字符串中的空格?
我正在使用以下内容:
"<a href=\"(.+?)\">(.+?)</a>"
匹配:
"<a href="x">xx</a>"
但是有时我的用户会输入以下内容:
"<a href="x" >xx</a>"
"<a href="x">xx</a>"
"<a href="x" >xx</a>"
如何修改正则表达式,使其匹配上述三个字符串中的一个或多个空格?
一种解决方案是\s*
在合法但不需要空格的地方以及需要\s+
空格的地方添加空格,如下所示:
<a\\s+href\\s*=\\s*\"([^\"]*)\"\\s*>([^<]*)</a>
另一方面,这正是为什么不应该尝试使用正则表达式解析 XML 或 HTML 的一个例子:它只是一个错误的工具来完成这项工作。使用 .NET 中可用的几种 XML 解析技术之一将提供更好的选择。
您可以使用 Negative lookahead 断言(?!\s)
,这样如果有空格它就不会匹配......
<a (?!\s)href=\"(?!\s)(.+?)\"(?!\s)>(?!\s)(.+?)</a>
但仅从需要添加的次数来看,您可以看到为此使用正则表达式可能不是正确的方法。
你想要的符号是+
。将匹配一个或多个空格。
<a +href=\"(.+?)\" *>(.+?)</a>
但是,通过正则表达式解析 html 通常是个坏主意。
这有点时髦,可能不是最好的,但它是这样的:
string.Join(" ", s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries))
编辑:(我知道这不是正则表达式)