用 N 个字符替换行首的 N 个空格
Replace N spaces at the beginning of a line with N characters
我正在寻找一个正则表达式替换来将一行开头的 N 个空格转换为 N
。所以这段文字:
list:
- first
应该变成:
list:
- first
我试过:
str = "list:\n - first"
str.gsub(/(?<=^) */, " ")
哪个returns:
list:
- first
少了一个
。如何改进替换以获得所需的输出?
将gsub
与回调函数一起使用:
str = "list:\n - first"
output = str.gsub(/(?<=^|\n)[ ]+/) {|m| m.gsub(" ", " ") }
这会打印:
list:
- first
模式 (?<=^|\n)[ ]+
在一行的开头捕获一个或多个 space。然后将此匹配传递给回调,回调将每个 space 一次替换为
.
您可以使用 \G
anchor 和 \K
来重置报告比赛的起点。
匹配所有前导单spaces:
(?:\R\K|\G)
(?:
非捕获组
\R\K
匹配一个换行符并清除匹配缓冲区
|
或
\G
断言上一场比赛结束时的位置
)
关闭非捕获组并匹配一个space
看到一个regex demo and a Ruby demo。
仅匹配示例字符串中的单个前导 space:
(?:^.*:\R|\G)\K
在部分中,模式匹配:
(?:
非捕获组
^.*:\R
匹配以:
结尾的行和匹配一个换行符
|
或
\G
断言位置在上一个匹配的末尾,或者在字符串的开头
)
关闭非捕获组
\K
忘记目前匹配的是什么,匹配一个space
看到一个regex demo and a Ruby demo。
例子
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"
您可以使用带有纯文本
替换模式的短 /(?:\G|^) /
正则表达式:
result = text.gsub(/(?:\G|^) /, ' ')
参见regex demo。 详情:
(?:\G|^)
- 一行或字符串的开头或上一场比赛的结尾
- 一个 space.
看到一个Ruby demo:
str = "list:\n - first"
result = str.gsub(/(?:\G|^) /, ' ')
puts result
# =>
# list:
# - first
如果您需要匹配任何白色space,请将
替换为 \s
模式。或者如果只需要匹配水平白色space.
,则使用\h
我正在寻找一个正则表达式替换来将一行开头的 N 个空格转换为 N
。所以这段文字:
list:
- first
应该变成:
list:
- first
我试过:
str = "list:\n - first"
str.gsub(/(?<=^) */, " ")
哪个returns:
list:
- first
少了一个
。如何改进替换以获得所需的输出?
将gsub
与回调函数一起使用:
str = "list:\n - first"
output = str.gsub(/(?<=^|\n)[ ]+/) {|m| m.gsub(" ", " ") }
这会打印:
list:
- first
模式 (?<=^|\n)[ ]+
在一行的开头捕获一个或多个 space。然后将此匹配传递给回调,回调将每个 space 一次替换为
.
您可以使用 \G
anchor 和 \K
来重置报告比赛的起点。
匹配所有前导单spaces:
(?:\R\K|\G)
(?:
非捕获组\R\K
匹配一个换行符并清除匹配缓冲区|
或\G
断言上一场比赛结束时的位置
)
关闭非捕获组并匹配一个space
看到一个regex demo and a Ruby demo。
仅匹配示例字符串中的单个前导 space:
(?:^.*:\R|\G)\K
在部分中,模式匹配:
(?:
非捕获组^.*:\R
匹配以:
结尾的行和匹配一个换行符|
或\G
断言位置在上一个匹配的末尾,或者在字符串的开头
)
关闭非捕获组\K
忘记目前匹配的是什么,匹配一个space
看到一个regex demo and a Ruby demo。
例子
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"
您可以使用带有纯文本
替换模式的短 /(?:\G|^) /
正则表达式:
result = text.gsub(/(?:\G|^) /, ' ')
参见regex demo。 详情:
(?:\G|^)
- 一行或字符串的开头或上一场比赛的结尾
看到一个Ruby demo:
str = "list:\n - first"
result = str.gsub(/(?:\G|^) /, ' ')
puts result
# =>
# list:
# - first
如果您需要匹配任何白色space,请将
替换为 \s
模式。或者如果只需要匹配水平白色space.
\h