我正在尋找一個正則運算式替換來將一行開頭的 N 個空格轉換為 N 。所以這段文字:
list:
- first
應該變成:
list:
- first
我努力了:
str = "list:\n - first"
str.gsub(/(?<=^) */, " ")
回傳:
list:
- first
這是缺少一個 。如何改進替代以獲得所需的輸出?
uj5u.com熱心網友回復:
您可以使用\G錨點并\K重置報告匹配的起點。
要匹配所有前導單個空格:
(?:\R\K|\G)
(?:非捕獲組\R\K匹配換行符并清除匹配緩沖區|要么\G在上一場比賽結束時斷言位置
)關閉非捕獲組并匹配一個空格
請參閱正則運算式演示和Ruby 演示。
要僅匹配示例字串中的單個前導空格:
(?:^.*:\R|\G)\K
在部分情況下,模式匹配:
(?:非捕獲組^.*:\R匹配以:和匹配換行符結尾的行|要么\G在上一個匹配的末尾或字串的開頭斷言位置
)關閉非捕獲組\K忘記到目前為止匹配的內容并匹配一個空格
請參閱正則運算式演示和Ruby 演示。
例子
re = /(?:^.*:\R|\G)\K /
str = 'list:
- first'
result = str.gsub(re, ' ')
puts result
輸出
list:
- first
uj5u.com熱心網友回復:
我會寫
"list:\n - first".gsub(/^ /) { |s| ' ' * s.size }
#=> "list:\n - first"
見字串#*
uj5u.com熱心網友回復:
gsub與回呼函式一起使用:
str = "list:\n - first"
output = str.gsub(/(?<=^|\n)[ ] /) {|m| m.gsub(" ", " ") }
這列印:
list:
- first
該模式(?<=^|\n)[ ] 在一行的開頭捕獲一個或多個空格。然后將該匹配傳遞給回呼,該回呼將每個空格一次一個替換為 .
uj5u.com熱心網友回復:
您可以使用/(?:\G|^) /帶有純文本 替換模式的短正則運算式:
result = text.gsub(/(?:\G|^) /, ' ')
請參閱正則運算式演示。詳情:
(?:\G|^)- 行或字串的開始或上一個匹配的結束- 空間。
查看Ruby 演示:
str = "list:\n - first"
result = str.gsub(/(?:\G|^) /, ' ')
puts result
# =>
# list:
# - first
如果您需要匹配任何空格,請替換 為\s模式。或者\h,如果您只需要匹配水平空格,請使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426754.html
上一篇:Ruby,如何覆寫setter(“=”)方法以允許2個引數?
下一篇:正則運算式重復模式
