我想在C#中使用Regex捕获以下模式,并将其替换为'Merged'一词
字符应至少有四个空格或一个标签。但是它们可以混合使用
space space space
- 无效 - '未合并'
space space space space
- 有效 - '合并'
space space space space space
- 有效 - '合并'
space <tab>
- 有效 - '合并'
<tab><tab>
- 有效 - '合并'
space<tab><tab>space
- 有效 - '合并'
答案 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]*
它检查核心条件(至少四个空格或一个选项卡),并匹配任意数量的周围选项卡或空格(以便您可以替换所有选项卡/空格空格)。