如何从字符串中删除多个换行符`\n`,但只保留一个?

huangapple go评论91阅读模式
英文:

How to remove multiple line break `\n` from a string but keep only one?

问题

在Go语言中,你可以使用正则表达式来实现替换多个换行符为一个换行符。以下是一个示例代码:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	str := "Some string\n\n\n\n\n\nFoo bar Step1:\n\nFoo bar Step2:\n\n\nFoo bar final"
	re := regexp.MustCompile(`(\r\n?|\n){2,}`)
	result := re.ReplaceAllString(str, "$1")

	fmt.Println(result)
}

这段代码使用了regexp包来进行正则表达式的匹配和替换。(\r\n?|\n){2,}表示匹配两个或以上的换行符,$1表示替换为第一个匹配的换行符。

运行以上代码,输出结果为:

Some string\nFoo bar Step1:\nFoo bar Step2:\nFoo bar final

这样就实现了在Go语言中替换多个换行符为一个换行符的功能。

英文:

At JavaScript, I was using this Regexp to replace multiple line break with one
str.replace(/(\r\n?|\n){2,}/g, '$1') but for golang I am not sure what it will be. How can I achieve this in golang?

Input:

> Some string\n\n\n\n\n\nFoo bar Step1:\n\nFoo bar Step2:\n\n\nFoo bar final

Output

> Some string\nFoo bar Step1:\nFoo bar Step2:\nFoo bar final

答案1

得分: 4

你可以做同样的事情。

rg := regexp.MustCompile(`(\r\n?|\n){2,}`)
s := "Some string\n\n\n\n\n\nFoo bar Step1:\n\nFoo bar Step2:\n\n\nFoo bar final"
result := rg.ReplaceAllString(s, "$1")
fmt.Printf("%q", result)
// "Some string\nFoo bar Step1:\nFoo bar Step2:\nFoo bar final"

https://go.dev/play/p/u-mfj7tXctO

英文:

You can do the same.

rg := regexp.MustCompile(`(\r\n?|\n){2,}`)
s := "Some string\n\n\n\n\n\nFoo bar Step1:\n\nFoo bar Step2:\n\n\nFoo bar final"
result := rg.ReplaceAllString(s, "$1")
fmt.Printf("%q", result)
// "Some string\nFoo bar Step1:\nFoo bar Step2:\nFoo bar final"

https://go.dev/play/p/u-mfj7tXctO

huangapple
  • 本文由 发表于 2022年4月23日 20:23:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/71979579.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定