1つのインスタンスだけをすべてではなく正規表現に置きたいと思います。 Goのregexp
ライブラリでどうすればいいですか?1つの出現箇所を正規表現に置き換えます
入力:foobar1xfoobar2x
正規表現:bar(.)x
交換:baz$1
ReplaceAllString
出力:foobaz1foobaz2
ReplaceOneString
出力:一般的にfoobaz1foobar2x
1つのインスタンスだけをすべてではなく正規表現に置きたいと思います。 Goのregexp
ライブラリでどうすればいいですか?1つの出現箇所を正規表現に置き換えます
入力:foobar1xfoobar2x
正規表現:bar(.)x
交換:baz$1
ReplaceAllString
出力:foobaz1foobaz2
ReplaceOneString
出力:一般的にfoobaz1foobar2x
、あなたは始めと終わりのための怠惰な試合と使用アンカーを使用する場合最初の動作を置き換えることができます。
replace `^(.*?)bar(.*)$` with `$1baz$2`.
例:
package main
import (
"fmt"
"regexp"
)
func main() {
src := "foobar1xfoobar2x"
pat := regexp.MustCompile("^(.*?)bar(.*)$")
repl := "${1}baz$2"
output := pat.ReplaceAllString(src, repl)
fmt.Println(output)
}
出力
foobaz1xfoobar2x
私は間違っています:http://play.golang.org/p/RiIxRIdDWs –
グループ変数を有効にするには、次の文字で識別名を使用する必要があります。更新された回答を参照してください。 – perreal
' (。*) '適切な置換と一緒に正規表現の末尾に十分なのでしょうか? –
私のパターンは非常に複雑だったので、私は受け入れられたソリューションを使用cound't。 私はReplaceAllStringFuncを使用して終わった: APIに依存https://play.golang.org/p/ihtuIU-WEYG
package main
import (
"fmt"
"regexp"
)
var pat = regexp.MustCompile("bar(.)(x)")
func main() {
src := "foobar1xfoobar2x"
flag := false
output := pat.ReplaceAllStringFunc(src, func(a string) string {
if flag {
return a
}
flag = true
return pat.ReplaceAllString(a, "baz$1$2")
})
fmt.Println(output)
}
。あなたは今何を使っていますか?これは、私たちがあなたのためにドキュメントを読むのに役立ちます。 – Qtax
@Qtax、Goのregexpライブラリ['Regexp.ReplaceAllString'](http://golang.org/pkg/regexp/#Regexp.ReplaceAllString)を使用しています。 'ReplaceOneString'の同等のAPIは存在しないようです。 –
回避策として[次の](http://regex101.com/r/mX7tN4)を試してみてください(徹底的にテストしませんでした) – HamZa