文字列抜き出し方

お世話になります。

以下の「8.1.10」「2.5.3 (1784)」「10.4.3.8」を抜き出したい場合は
どのようにしたらよいのでしょうか?("で囲まれた中の数字)

①"meter_version":“8.1.10”,“panelist_id”:
②"meter_version":“2.5.3 (1784)”,“panelist_id”
③"meter_version":“10.4.3.8”,“panelist_id”

・エクセルに上記が書いてあって、上から順番に行を読み取っていくロボットです。
・“meter_version”:"の後の” ”で囲まれた中身の数字を抽出したいです。
・中身の数値の文字数は決まっていません。

“meter_version”:"(.*)",“panelist_id”:\r\n
str変数(0).Groups(1).ToString

Groupsメソッドを使ってみたのですが、指定方法が悪いのかうまくいきません。
アドバイス頂けると助かります。

よろしくお願いします。

こちらでいかがでしょうか。
出力パネルに出ているものが正しければこちらで取得可能です。

※追記
「row(0)」となっている部分は、もしヘッダーなどがあるならヘッダー名で良いです。

こんにちは

やり方はいろいろあるかと思いますが、上記条件をそのまま考慮すると
以下の正規表現で取得できると思います。(以下の場合数字以外も返しますが)

System.Text.RegularExpressions.Regex.Match(cellValue,"(?<=""meter_version"":"").+?(?="")").Value

こんにちは
初めてコメントさせて頂きます。
実際に①②③以降の文字列をExcelに貼りつけて行ってみました。
1117さんと近いのですが、まず『”』これ、ダブルクォーテーションが全角と半角混在なので、繰り返し各行の中で、代入を使い半角に変換します。
次に同じく代入でreplaceを使って半角のダブルクォーテーションをなくします。
最後に1117さんが記載くださったsplitを使って該当箇所を抜き出します。
全て代入で、左側は同じstring変数を使います。
このstring変数をセルに書き込み、を使って任意のExcelに書き出しました。
諸事情によりフローが貼り付けられずとても残念です。
正規表現が苦手なので、そういう人向けに回答を出しました。

みなさま

ご返答ありがとうございます!
ご連絡遅くなり申し訳ございません。。

すべて試してみたのですが、なかなかうまくいきません。。
というのも、私が詳細情報を省略してしまったためです。
申し訳ないですが、再度質問させてください。

以下の文字列があり、“meter_version”:“8.1.10”の「8.1.10」のみを切り出したいです。
以下のフォーマットは文字列、文字数などは決まっていないのですが、「meter_version」というのがあればその後ろの数値をとりたいです。(これはifメソッドで対応できそうです)

hardware_id":“11df448deaadf55”,“os”:“Android-OS-6.0.1”,“android_id”:“87df448deaadf55”,“locale”:“JP”,“phone_number”:“0900900”,“msid”:“440104760”,“serial_number”:“YT910YT”,“meter_version”:“8.1.10”,“panelist_id”:“1163406”,“mobile_id”:“1124”,“advertizer_id”:"330c2244-0689

splitメソッドがよいのでしょうか?

よろしくお願いします。

こんにちは

どの方法でも可能と思いますが、この掲示板はダブルクォーテーションが全角に自動変換されるので、まずはその点を注意いただくのが良いかと思います。

一応当方が記載した式のサンプル添付します。

Main.xaml (5.6 KB)

@Yoichi
ありがとうございます!
ダブルクォーテーションは勝手に全角になるのですね。。
すべて小文字の設定です。

サンプルロボットをありがとうございます!
もし可能でしたら、以下の解説をお願いできますでしょうか?
初心者過ぎて申し訳ございません。
自分でも調べてみます。
System.Text.RegularExpressions.Regex.Match(text,"(?<="“meter_version”":"").+?(?="")").Value

こんにちは

もし可能でしたら、以下の解説をお願いできますでしょうか?

正規表現の解説はインターネット上に数多くあるので詳細はそちらを参照いただきたいですが、
パターン部分を簡単に説明すると

 (?<=""meter_version"":"")

"meter_version":" で始まる文字列にマッチします。ただしこれ自身はマッチ文字列に含まれません。

.+?

1文字以上の「改行以外の文字」に最短マッチします。

(?="")

" で終わる文字列にマッチします。ただしこれ自身はマッチ文字列に含まれません。

これをつなげると"meter_version":""の間の文字を取得することになります。

なおダブルクォートは特殊文字なので""で一文字のダブルクォートを表します。

@ Yoichi さん
ありがとうございます!たすかりました!

1 Like

既に解決されているようですが、正規表現を使わずに出来ましたので、ご参加まで。

まず、doraさんのおっしゃる長い文字列(hardwareから始まる)をExcelのセル、1つのセルに入れてみました。

セルを読み込んで、半角にして、replaceで"“を取り除くまでは前回と同じ感じです。
次にsplitではなく、removeを使います。
こんな感じです。
str.remove(0,str.indexOf(“meter_version:”)+14)
記述方法など詳しくはremoveで調べてみて下さい。
ここまでで、前半部分が削除されます。
最後に後半部分を消します。
str.remove(str.IndexOf(”,"))

これで8.1.10の後の, 以降が消えるので、ご希望の8.1.10が取り出せました。
Excelに貼り付けてみましたが、問題なさそうでした。

以上、removeでの解決でした。