C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

同じワードがある文の正規表現 /Tom (20/05/23(Sat) 20:03) #94832
Re[1]: 同じワードがある文の正規表現 /Hongliang (20/05/23(Sat) 20:49) #94835
  └ Re[2]: 同じワードがある文の正規表現 /Tom (20/05/23(Sat) 22:02) #94838 解決済み


親記事 / ▼[ 94835 ]
■94832 / 親階層)  同じワードがある文の正規表現
□投稿者/ Tom (23回)-(2020/05/23(Sat) 20:03:12)

分類:[.NET 全般] 

c#

正規表現で文字を切り出しているのですが、文中に指定ワードが複数あると最後のものを拾ってしまいます。

Debug.WriteLine(Regex.Replace("ほにゃららABC01、ほげほげABC99うじゃ", ".*ABC([0-9]+)", "$1"));
で期待値は "01" なのですが "99うじゃ" が表示されます。
("うじゃ"が表示されるのも謎なのですが…)

先頭のモノを拾いたいのですが、どのような正規表現記載にすればよいのでしょうか?

賢者の方、ご教授いただけませんでしょうか?
[ □ Tree ] 返信 編集キー/

▲[ 94832 ] / ▼[ 94838 ]
■94835 / 1階層)  Re[1]: 同じワードがある文の正規表現
□投稿者/ Hongliang (1033回)-(2020/05/23(Sat) 20:49:02)
正規表現で最短一致は ? を使って
.*?ABC([0-9]+)
のように記述します。
また初めのを表すために、文頭を指す ^ を付けた方がいいでしょう。
^.*?ABC([0-9]+)
そして、「切り出す」のが目的であれば、Replace()よりもMatch()を使った方が自然かなと思います。多少コードの記述量は増えるかもしれませんが。
[ 親 94832 / □ Tree ] 返信 編集キー/

▲[ 94835 ] / 返信無し
■94838 / 2階層)  Re[2]: 同じワードがある文の正規表現
□投稿者/ Tom (24回)-(2020/05/23(Sat) 22:02:42)
Hongliang さま


うまく行きました!
あと、Replace()よりもMatch()のほうが挙動も期待通りでした。

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

解決済み
[ 親 94832 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -