正则表达式匹配超过 2 个空格但不匹配新行
Posted
技术标签:
【中文标题】正则表达式匹配超过 2 个空格但不匹配新行【英文标题】:Regex to match more than 2 white spaces but not new line 【发布时间】:2011-08-02 09:07:46 【问题描述】:我想替换字符串中所有超过 2 个空格但不是新行,我有这个正则表达式:\s2,
但它也匹配新行。
如何只匹配 2 个或更多空格而不匹配新行?
我正在使用 c#
【问题讨论】:
@nihcap - 实际上,C# 没有自己的正则表达式风格,它是 .Net 公共库的一部分。在这种情况下,.Net 和 C# 都是有用的标签。 【参考方案1】:将要匹配的空白字符放入字符类中。例如:
[ \t]2,
匹配 2 个或更多空格或制表符。
你也可以这样做:
[^\S\r\n]2,
匹配除\r
和\n
之外的任何空白字符至少两次(注意\S
中的大写S
是[^\s]
的缩写)。
【讨论】:
最后一句话中的“缩写”是什么意思?如果没有这个速记,整个正则表达式会是什么样子? @LonnieBest 在正则表达式中,对于转义序列如 \w,通常约定大写转义序列是小写转义序列的反字符集。例如。 \d 是 \D 的倒数,\s 是 \S 的倒数,\w 是 \W 的倒数,等等。此外,在由 [ ] 分隔的字符类集中,例如 [abc],可以指定一个倒数使用 [^abc]。因此,\S 等价于 [^\s],如果允许的话,它也等价于不允许的符号 [^^\S]。 (^^ 不是表示逆的有效方式。) @DejayClayton 谢谢,我不知道。 这个答案有效,但为什么\s2,
抓住换行符继续它?如果是\n\s2,
我会理解的。为什么在括号中输入文字空格会起作用?
“这个答案有效,但为什么 \s2, 会抓住换行符继续它?”因为\s
匹配空格、制表符和换行符。 “为什么在括号中输入文字空格会起作用?”,嗯,错误,因为它确实如此。不知道还能说什么:)【参考方案2】:
正则表达式只针对两个空格: []2, 正则表达式中的括号是字符类。意思只是那里的字符。这里只是空间。下面的大括号表示两次或多次。
【讨论】:
以上是关于正则表达式匹配超过 2 个空格但不匹配新行的主要内容,如果未能解决你的问题,请参考以下文章