0

我想在 C# 中使用 Regex 捕获以下模式并将其替换为单词“Merged”

字符应至少有四个空格或一个制表符。但是它们可以混合

space space space - 无效 - '未合并'

space space space space - 有效 - '合并'

space space space space space- 有效 - '合并'

space <tab> - 有效 - '合并'

<tab><tab>- 有效 - '合并'

space<tab><tab>space- 有效 - '合并'

4

3 回答 3

3

以下应该有效:

[ ]*\t[ \t]*|[ ]{4,}

我用空格[ ]来表示清楚发生了什么,但如果你去掉方括号,它也会起作用。

解释:

  [ ]*      # any number of spaces
  \t        # a single tab
  [ \t]*    # any number of spaces or tabs
|         # OR
  [ ]{4,}   # 4 or more spaces

示例:http ://www.rubular.com/r/MJYp80iEN1

这是一个替代方法,它使用前瞻来检查条件,然后匹配任意数量的空格或制表符:

(?=[ ]*\t|[ ]{4})[ \t]+
于 2012-08-28T18:51:39.350 回答
1

{4,}| *\t[ \t]*

{4,}表示 4 个或更多空格
|交替 - 就像OR上面的选项和低于
*零个或多个空格的所有内容之间的运算符(在下面的制表符之前)
\t一个制表符
[ \t]*零个或多个制表符或制表符之后的空格(在上面的制表符之后)

这些是每个 之后的单个空格[

这允许空格和制表符的任意组合,只要至少有一个制表符,这就是您的问题的阅读方式。如果选项卡场景中有其他限制,请发表评论,我会更新答案。

var result = Regex.Replace(input, @" {4,}|[ \t]*\t[ \t]*", "Merged");
于 2012-08-28T18:51:57.470 回答
0

我会尝试这个正则表达式:

[ \t]*( {4}|*\t)[ \t]*

它检查核心条件(至少四个空格或一个制表符),并匹配任意数量的周围制表符或空格(这样您就可以替换所有制表符/空格空白)。

于 2012-08-28T18:52:33.237 回答