正则表达式找到至少四个空格或一个标签或混合

时间:2012-08-28 18:45:05

标签: c# regex

我想在C#中使用Regex捕获以下模式,并将其替换为'Merged'一词

字符应至少有四个空格或一个标签。但是它们可以混合使用

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

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

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

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

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

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

3 个答案:

答案 0 :(得分: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]+

答案 1 :(得分:1)

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

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

每个[之后都是单个空格。

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

var result = Regex.Replace(input, @" {4,}|[ \t]*\t[ \t]*", "Merged");

答案 2 :(得分:0)

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

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

它检查核心条件(至少四个空格或一个选项卡),并匹配任意数量的周围选项卡或空格(以便您可以替换所有选项卡/空格空格)。