【问题标题】:Regex to match more than 2 white spaces but not new line正则表达式匹配超过 2 个空格但不匹配新行
【发布时间】:2011-08-02 09:07:46
【问题描述】:

我想替换字符串中所有超过 2 个空格但不是新行,我有这个正则表达式:\s{2,} 但它也匹配新行。

如何只匹配 2 个或更多空格而不匹配新行?

我正在使用 c#

【问题讨论】:

  • @nihcap - 实际上,C# 没有自己的正则表达式风格,它是 .Net 公共库的一部分。在这种情况下,.Net 和 C# 都是有用的标签。

标签: c# .net regex newline whitespace


【解决方案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 谢谢,我不知道。
  • 这个答案有效,但为什么\s{2,} 抓住换行符继续它?如果是\n\s{2,} 我会理解的。为什么在括号中输入文字空格会起作用?
  • “这个答案有效,但为什么 \s{2,} 会抓住换行符继续它?”因为\s 匹配空格、制表符和换行符。 “为什么在括号中输入文字空格会起作用?”,嗯,错误,因为它确实如此。不知道还能说什么:)
【解决方案2】:

正则表达式只针对两个空格: []{2,} 正则表达式中的括号是字符类。意思只是那里的字符。这里只是空间。下面的大括号表示两次或多次。

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多