ビルダー正規表現で配列に取得した配列内で分割したいです。
イメージ
数字8桁を取得。4桁4桁で分割して格納したい
Array(0)⇨Array (0)(1)
ビルダー正規表現で配列に取得した配列内で分割したいです。
イメージ
数字8桁を取得。4桁4桁で分割して格納したい
Array(0)⇨Array (0)(1)
ご教示いただけると幸いです
こんにちは
このようなケースは、正規表現であらかじめグルーピングしておき、それを抽出したほうが良いかと思います。
パターン : "(\d{4})(\d+)"
としておくと
currentItem.Groups(1).Value
currentItem.Groups(2).Value
でそれぞれ取得できます。
あるいはすでに全体を取得しているのであれば、文字列操作でも取得できるかもしれません。
iematch(0).Value.SubString(0,4)
iematch(0).Value.SubString(4)
上記正規表現でグルーピングしても4桁で分割されて配列にはいらません。
正規表現の他オプションはどうすればいいのでしょうか
現在どのように設定していますか?
currentItem.Groups(1).Value
のようにGroupsプロパティを使っていますでしょうか?
Googleプロパティとはなんでしょう。
プロパティは以下の通りです
指定回数が1回
正規表現がカスタム
Groupsプロパティです。正規表現パタン中のかっこ内をグループとして個別に抽出することができます。
上記のワークフローのスクリーンショットのように
ForEachの中で
currentItem.Groups(1).Value
のように使うか、もし最初の要素だけでよければ
iem(0).Groups(1).Value
iem(0).Groups(2).Value
のようにしてみてください。iemはIEnumerable<Match>
です。
あるいは、現在すでに8桁で抽出できているのであれば
iem(0).Value.SubString(0,4)
iem(0).Value.SubString(4)
でもそれぞれ集出できると思います。
理解しました。ありがとうございます
私としては、この分割した二つの要素をその後同じ配列として扱いたいのですが、どうすればいいでしょうか
一つの配列に代入したいということでしょうか?
単純には
arrStr = {iem(0).Groups(1).Value, iem(0).Groups(2).Value}
とすれば可能ですが...意図とあっていますでしょうか?
はい。ご認識の通りですが、普通の配列ではなく、IENumarable型に入れたいです
入力文字列にもよりますが、最初から正規表現パターンを
\d{4}
とした方がよいかもしれません。
そうすればIEmnumerable<Match>
の要素として2つ生成されると思います。
(他にマッチする文字列がなければ)
ではなく、\d{4}ということでしょうか