1

Go で regexp を使用してケースを交換したい。Javascriptで同様の方法を使用しようとしましたが、Goに$記号を理解させる方法がわかりません。

func swapcase(str string) string {
    var validID = regexp.MustCompile(`[A-Z]`)
    return validID.ReplaceAllString(str, strings.ToLower(str))

/*
 var validID = regexp.MustCompile(`[a-z]`)
 return validID.ReplaceAllString(str, strings.ToUpper(str))
*/
}

これが私の試みでした。すべての大文字を小文字に、またはその逆に変換するのに機能しますが、私がやりたいのは、すべての文字を同時に交換することです。たとえば、「こんにちは」 ---> 「こんにちは」

以下は、完璧に機能する Javascript の私のコードです。

 function SwapCase(str) {

     return str.replace(/([a-z])|([A-Z])/g,
        function($0, $1, $2) {
            return ($1) ? $0.toUpperCase() : $0.toLowerCase();
        })
 }
4

1 に答える 1

1

これを正規表現で行うことはできませんが (私はそう思います) strings.Map、.

package main

import (
    "fmt"
    "strings"
)

func swapCase(r rune) rune {
    switch {
    case 'a' <= r && r <= 'z':
        return r - 'a' + 'A'
    case 'A' <= r && r <= 'Z':
        return r - 'A' + 'a'
    default:
        return r
    }
}

func main() {
    s := "helLo WoRlD"
    fmt.Println(strings.Map(swapCase, s))
}
于 2013-09-28T12:35:20.773 に答える