我正在寻找一个正则表达式替换,将一行开头的N个空格转换为N个
。所以这个文本:
list:
- first
应该变成:
list:
- first
我试过:
str = "list:n - first"
str.gsub(/(?<=^) */, " ")
返回:
list:
- first
其缺少一个CCD_ 2。如何改进替换以获得所需的输出?
您可以使用G
锚点和K
来重置报告匹配的起点。
匹配所有领先的单个空格:
(?:RK|G)
(?:
非捕获组RK
匹配新行并清除匹配缓冲区|
或G
断言上一场比赛结束时的位置
)
关闭非捕获组并匹配空间
查看regex演示和Ruby演示。
只匹配示例字符串中的单个前导空格:
(?:^.*:R|G)K
在某些部分,模式匹配:
(?:
非捕获组^.*:R
匹配以:
结尾的行并匹配新行|
或G
断言上一个匹配的末尾或字符串开头的位置
)
关闭非捕获组K
忘记目前匹配的内容,匹配一个空格
查看regex演示和Ruby演示。
示例
re = /(?:^.*:R|G)K /
str = 'list:
- first'
result = str.gsub(re, ' ')
puts result
输出
list:
- first
我会写
"list:n - first".gsub(/^ +/) { |s| ' ' * s.size }
#=> "list:n - first"
参见字符串#*
使用带有回调函数的gsub
:
str = "list:n - first"
output = str.gsub(/(?<=^|n)[ ]+/) {|m| m.gsub(" ", " ") }
此打印:
list:
- first
图案CCD_ 18捕获在一条线的开始处的一个或多个空间。然后,这个匹配被传递给回调,回调用
一次一个地替换每个空间。
您可以使用带有纯文本
1替换模式的短/(?:G|^) /
正则表达式:
result = text.gsub(/(?:G|^) /, ' ')
请参阅regex演示详细信息:
(?:G|^)
-行或字符串的开头或上一个匹配的结尾-一个空间
查看Ruby演示:
str = "list:n - first"
result = str.gsub(/(?:G|^) /, ' ')
puts result
# =>
# list:
# - first
如果需要匹配任何空白,请将替换为
s
模式。如果只需要匹配水平空白,也可以使用h
。