可能重复:
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>"
如何修改正则表达式,使其匹配上面三个字符串中的一个或多个空格?
答案 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))
编辑:(我知道它不是正则表达式)