Webで取得した文字列の一部の文字列を取り除きたい。

いつも大変お世話になっております。

Webで取得した文字列から一部の文字列を取り除きたいです。

下記のような文字列から日付だけを残したいでのすが、スペースのようなものが含まれています。
「 令和05-12-08 05:00 PM」

Replace関数でスペースを取り除いてもできませんでした。

書き込みをしてみると、
「“message”: " ¥n¥t¥t¥t¥t令和05-12-15 01:00",」
と表示されました。

¥、n、t、それぞれをReplaceで取り除こうとしても削除されません。

また、Split関数を使って半角スペースで区切ったにも関わらず、
「01:00」が含まれます。

お気づきの点ありましたらご教授ください。

Hi @kiki1

Input= "Reiwa 05-12-08 05:00 PM"
Output= System.Text.RegularExpressions.Regex.Match(Inupt,"\d+.*").Value.Split(" ")(0)


Regards

こんにちは

取得したい結果は08でしょうか?

そうであれば以下で取得できます。

System.Text.RegularExpressions.Regex.Match("令和05-12-08 05:00 PM","(?<=\d+-\d+-)\d+").Value

05-12-08であれば以下になります。

System.Text.RegularExpressions.Regex.Match("令和05-12-08 05:00 PM","\d+-\d+-\d+").Value

アドバイスありがとうございます。
取り出したいのは、「令和05-12-08」なのですが、どのようになりますか?
ちなみに、「05:00」の場合はどのようになるのでしょう?

以下いかがでしょうか?

取り出したいのは、「令和05-12-08」なのですが、どのようになりますか?

System.Text.RegularExpressions.Regex.Match("令和05-12-08 05:00 PM","\w+\d+-\d+-\d+").Value

ちなみに、「05:00」の場合はどのようになるのでしょう?

PMが不要であれば

System.Text.RegularExpressions.Regex.Match("令和05-12-08 05:00 PM","\d+:\d+").Value

Hi @kiki1

Check out the below way:

Input= "Reiwa 05-12-08 05:00 PM"
Output= System.Text.RegularExpressions.Regex.Match(Input, "[A-Za-z]+\s+\d.*").Value.Trim()
Message Box-> String.Join(" ", Output.Split(" "c).Take(2))


Input= "Reiwa 05-12-08 05:00 PM"
Output= System.Text.RegularExpressions.Regex.Match(Input, "[A-Za-z]+\s+\d.*").Value.Trim()
Message Box-> String.Join(" ", Output.Split(" "c).Skip(2))


Regards

早速ありがとうございます。

最終的に令和05年12月08日など、Excelで日付認識されるような形に変換したいのですが、簡単に変更できますか?
Split関数で「-」で区切って、それぞれの文字列と「年月日」の文字を組み合わせようと考えていたのですが。

また、「05:00 PM」は、「17:00」の形に簡単に変換できるのでしょうか?

Hi @kiki1

You can give “HH:mm” this will convert to 5:00 PM to 17:00.

If you have any specification what you want to do exactly please provide the input and required output.

Regards

こんにちは

一旦DateTime型に変換すると、後のハンドリングが楽なのでそのようにした方が良いかと思います。

strDate = "令和05-12-08 05:00 PM"
ci = New System.Globalization.CultureInfo("ja-JP")
ci.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()
varDateTime = DateTime.ParseExact(strDate.Replace("AM","午前").Replace("PM","午後"), "ggyy-MM-dd hh:mm tt",ci)

としておけば、DateTime型の変数から任意のフォーマットに出力できます。

varDateTime.ToString("ggyy/MM/dd HH:mm:ss",ci)

サンプル
Sample20231227-3.zip (2.7 KB)

ご丁寧にありがとうございます。
まず「05:00 PM」を取り出すにはどのようなコードになりますか?
ここは、AMとなる可能性もあります。

文字列から直接取り出すなら

System.Text.RegularExpressions.Regex.Match(strDate,"\d+:\d+.*")

DateTIme型変数に変換してから取り出すなら

varDateTime.ToString("hh:mm tt")

教えてくださりありがとうございます。
こちらの場面でエラーが表示されます。
image

お気づきの点ありましたらご教授ください。

まずは右辺の式全体がどうなっているかと、cultureinfoを正しく作成できているかの確認になるかと思いますので、このあたりを共有いただけますでしょうか。

教えていただいた通り、入力したつもりなのですが、不備があれば教えてください。
Sample20231228.zip (2.7 KB)

原因は、文字列中にある空白が通常の空白ではなく、non-breaking spaceとなっているためです。
(見た目ではわかりませんが)

strDate = System.Text.RegularExpressions.Regex.Replace(strDate.Replace("AM","午前").Replace("PM","午後"),"\s+"," ").Trim()

としてから

DateTime.ParseExact(strDate, "ggyy-MM-dd hh:mm tt",ci)

としてみてください

無事解決できました。
どうもありがとうございました :relieved:

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.