質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1253閲覧

文字を分割したいです

inukujira

総合スコア130

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2021/06/22 02:53

編集2021/06/22 03:06

すみません、教えてください。
以下の値があります。

go

1"format": "H${date:YY}${num}"

このformat文字列を区切り文字を$として区切り文字を残したまま分割したいです。
求める結果は以下の3つです。

H ${date:YY} ${num}

私が試したので以下の構文ですが結果的に区切り文字が維持されず困ってます...。

go

1// 区切り文字を残したまま分割 2slice := regexp.MustCompile(`[(?=$)]`).Split(r.Format, -1) 3 4// 表示 5for _, str := range slice { 6 fmt.Println(str) 7} 8 9// → result 10// H 11// {date:YY} 12// {num}

https://play.golang.org/p/ajQCj0hxBxG

大変恐縮ですが区切り文字を残したままSplitするにはどのように行えばよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Splitの標準の挙動はそういうものなので。
strings.SplitAfterは近しい結果を得られますが、すこし結果が異なってしまいますね。

ここに「https://stackoverflow.com/questions/55212090/string-splitting-before-character」まさに欲しい挙動の「SplitBefore」実装が回答コメントにあります。

https://play.golang.org/p/P4rZvBAuSih

go

1func SplitBefore(s, sep string) (out []string) { 2 // this can be omitted if staying analogous with SplitAfter is not a requirement 3 if strings.HasPrefix(s, sep) { 4 out = append(out, "") 5 } 6 7 for len(s) > 0 { 8 i := strings.Index(s[1:], sep) 9 if i == -1 { 10 out = append(out, s) 11 break 12 } 13 14 out = append(out, s[:i+1]) 15 s = s[i+1:] 16 } 17 return out 18}

別解

$\n$に置き換えてから、改行区切りでSplitするのはどうでしょうか?

https://play.golang.org/p/KQTY1oP0Of9

go

1package main 2 3import ( 4 "fmt" 5 "strings" 6) 7 8func SplitBefore(s string) []string { 9 s = strings.ReplaceAll(s, "$", "\n$") 10 return strings.Split(s, "\n") 11} 12 13func main() { 14 fmt.Println(SplitBefore("H${date:YY}${num}")) 15}

投稿2021/06/22 04:54

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inukujira

2021/06/22 14:42

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問