Go 删除紧随其后的重复字符

Go 删除紧随其后的重复字符,go,Go,我正在尝试删除紧跟在后面的重复字符 例如,“Whyyyy-sooo-ssserioouusss”应翻译为“Why-soo-ssserioouusss” 在PHP PCRE中,这是可能的 $text = preg_replace("/(.)\\1+/", "$1", $text); 我试着做下面的事情 var duplicateRegex = regexp.MustCompile(`(?P<char>.)${char}+`) text = duplicateRegex.Replace

我正在尝试删除紧跟在后面的重复字符

例如,“Whyyyy-sooo-ssserioouusss”应翻译为“Why-soo-ssserioouusss”

在PHP PCRE中,这是可能的

$text = preg_replace("/(.)\\1+/", "$1", $text);
我试着做下面的事情

var duplicateRegex = regexp.MustCompile(`(?P<char>.)${char}+`)
text = duplicateRegex.ReplaceAllString(text, `${char}`)
var duplicateRegex=regexp.MustCompile(`(?P.)${char}+`)
text=duplicateRegex.ReplaceAllString(文本,`${char}`)

但在围棋中似乎不起作用。有什么想法吗? 谢谢

试试这个:

str := "Whyyyy sooo ssserioooouuussss 日本語語語"
fmt.Println(str)
var buf bytes.Buffer
var pc rune
for i, c := range str {
    if i ==  0{
        pc = c
        buf.WriteRune(c)
    }

    if pc == c {
        continue
    }

    pc = c
    buf.WriteRune(c)
}
fmt.Println(buf.String())
结果:

Whyyyy sooo ssserioooouuussss 日本語語語
Why so serious 日本語
试试这个:

str := "Whyyyy sooo ssserioooouuussss 日本語語語"
fmt.Println(str)
var buf bytes.Buffer
var pc rune
for i, c := range str {
    if i ==  0{
        pc = c
        buf.WriteRune(c)
    }

    if pc == c {
        continue
    }

    pc = c
    buf.WriteRune(c)
}
fmt.Println(buf.String())
结果:

Whyyyy sooo ssserioooouuussss 日本語語語
Why so serious 日本語

请尝试以下代码。它的范围是一个接一个的字符串符文。如果符文与上一个不同,或者是第一个符文,那么将符文添加到结果中

func removeDups(s string) string {
    var buf bytes.Buffer
    var last rune
    for i, r := range s {
        if r != last || i == 0 {
            buf.WriteRune(r)
            last = r
        }
    }
    return buf.String()
}

在Go 1.10中,可以替换为以最小化分配。

尝试以下代码。它的范围是一个接一个的字符串符文。如果符文与上一个不同,或者是第一个符文,那么将符文添加到结果中

func removeDups(s string) string {
    var buf bytes.Buffer
    var last rune
    for i, r := range s {
        if r != last || i == 0 {
            buf.WriteRune(r)
            last = r
        }
    }
    return buf.String()
}

在Go 1.10中,可以替换为以最小化分配。

AFAIK,Go正则表达式中没有反向引用,因此
${char}
\k
。。。在模式本身中不起作用。AFAIK,Go正则表达式中没有返回引用,因此
${char}
\k
。。。在模式本身中不起作用。