人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現:行頭に続く*5文字までを同数のスペースに置き換えたい
vb.netで正規表現を使用しています。行頭にアスタリスクが0?5文字までついているものを同数のスペースに置き換えたいのです。

例:「***123」→「 123」「**12」→「 12」

正規表現で表記する方法、もしくは表記できないのであればそう教えてください。

普通に文字列としてループさせながら処理するとか、5文字まででいったん切断して処理するとかはできますので、回答は結構です。

●質問者: memo77
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:VB.NET アスタリスク ループ 文字列 普通に
○ 状態 :終了
└ 回答数 : 1/2件

▽最新の回答へ

1 ● y-kawaz
●100ポイント ベストアンサー

単純な文字列置換の正規表現では、繰り返し回数指定があるパターンに対してその繰り返し数と同じ数の置換を行う、ということは表現できません。

ですが、単純な文字列置換ではなくマッチした文字列を MatchEvaluator デリゲートに渡すようにすればそのような置換も可能です。

Imports System.Text.RegularExpressions

Namespace MyNameSpace
 Module Module1

 Public Sub Main()
 Dim myEvaluator As MatchEvaluator = New MatchEvaluator(AddressOf ReplaceToWS)
 Console.WriteLine(Regex.Replace("******A", "^\*{0,5}", myEvaluator))
 End Sub

 Public Function ReplaceToWS(ByVal m As Match) As String
 Return m.ToString.Replace("*", " ")
 End Function

 End Module
End Namespace

上記サンプルでは "(スペース5個)*A" という文字が出力されます。

仕組みとしては、"^\*{0,5}"(先頭から5文字以下のアスタリスク)にマッチしたら、その部分に対してReplaceToWS関数を実行するという風になります。

◎質問者からの返答

なるほど!

美しいし応用がききますね。

非常に勉強になりました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ