正規表現で詰まりました。
投稿者 (削除されました)  ()
投稿日時
2010/8/10 12:12:46
(削除されました)
投稿者 よねKEN  (社会人)
投稿日時
2010/8/10 12:15:34
他にもいい方法があるかもしれませんが、
Regex.Replaceの以下のURLのオーバーロードを用いて実現できます。
http://msdn.microsoft.com/ja-jp/library/ht1sxswy.aspx
' コード例
Imports System
Imports System.Text.RegularExpressions
Module Program
Sub Main
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "\w+"
Console.WriteLine(Regex.Replace(text, pattern, AddressOf MyMatchEvaluator))
Console.Read()
End Sub
Public Function MyMatchEvaluator(ByVal match As Match) As String
Return match.Value.Substring(0, 1) & new String("●"c, match.Length-1)
End Function
End Module
Regex.Replaceの以下のURLのオーバーロードを用いて実現できます。
http://msdn.microsoft.com/ja-jp/library/ht1sxswy.aspx
' コード例
Imports System
Imports System.Text.RegularExpressions
Module Program
Sub Main
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "\w+"
Console.WriteLine(Regex.Replace(text, pattern, AddressOf MyMatchEvaluator))
Console.Read()
End Sub
Public Function MyMatchEvaluator(ByVal match As Match) As String
Return match.Value.Substring(0, 1) & new String("●"c, match.Length-1)
End Function
End Module
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/8/10 12:15:41
これでどうでしょう
Dim result As String = Regex.Replace(source, "\w+", Function(m) m.Value(0) & StrDup(m.Length - 1, "●"c))
投稿者 よねKEN  (社会人)
投稿日時
2010/8/10 12:59:05
以下のような方法もあります。
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "(?:\w)\w*"
Console.WriteLine(Regex.Replace(text, pattern, "●"))
この書き方については以下をご覧ください。
グループ化構成体 - 非キャプチャ グループ
http://msdn.microsoft.com/ja-jp/library/bs2twtah.aspx#noncapturing_group
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "(?:\w)\w*"
Console.WriteLine(Regex.Replace(text, pattern, "●"))
この書き方については以下をご覧ください。
グループ化構成体 - 非キャプチャ グループ
http://msdn.microsoft.com/ja-jp/library/bs2twtah.aspx#noncapturing_group
投稿者 T  (社会人)
投稿日時
2010/8/10 21:02:00
よねKENさん、魔界の仮面弁士さん、どうもありがとうございます!
よねKENさんのやり方の、AddressOf MyMatchEvaluatorとか、
魔界の仮面弁士さんの、Function(m) の部分とか、
理解できてませんが、とりあえず、うまくいきました。
ちなみに、よねKENさんの二つめの方法は試してみましたが、うまくいきませんでした。
●●●●,●●●●●●.
みたいな感じになりました。
よねKENさんのやり方の、AddressOf MyMatchEvaluatorとか、
魔界の仮面弁士さんの、Function(m) の部分とか、
理解できてませんが、とりあえず、うまくいきました。
ちなみに、よねKENさんの二つめの方法は試してみましたが、うまくいきませんでした。
●●●●,●●●●●●.
みたいな感じになりました。
投稿者 よねKEN  (社会人)
投稿日時
2010/8/10 23:07:02
> ちなみに、よねKENさんの二つめの方法は試してみましたが、うまくいきませんでした。
> ●●●●,●●●●●●.
> みたいな感じになりました。
申し訳ありません。きちんと結果を確認してから投稿したつもりでしたが、
今試したらご指摘の通りうまく行きませんでした。結果の確認のときに何か勘違いをしたようです。
で、修正版を考えました。
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "(?<=\w)\w"
Console.WriteLine(Regex.Replace(text, pattern, "●"))
でうまく行きます。VB2008で確認しました。
「(?<=」という書き方の部分が肝ですが、この件についての資料は以下にあります。
ゼロ幅の正の後読みアサーション
http://msdn.microsoft.com/ja-jp/library/bs2twtah.aspx#zerowidth_positive_lookbehind_assertion
ただ正直、上記のURLの説明は難解なので、以下のURL(のページの真ん中付近)
の説明の方がわかりやすいと思います。
http://dobon.net/vb/dotnet/string/regex.html
> ●●●●,●●●●●●.
> みたいな感じになりました。
申し訳ありません。きちんと結果を確認してから投稿したつもりでしたが、
今試したらご指摘の通りうまく行きませんでした。結果の確認のときに何か勘違いをしたようです。
で、修正版を考えました。
Dim text As String = "When I was a child, I went there."
Dim pattern As String = "(?<=\w)\w"
Console.WriteLine(Regex.Replace(text, pattern, "●"))
でうまく行きます。VB2008で確認しました。
「(?<=」という書き方の部分が肝ですが、この件についての資料は以下にあります。
ゼロ幅の正の後読みアサーション
http://msdn.microsoft.com/ja-jp/library/bs2twtah.aspx#zerowidth_positive_lookbehind_assertion
ただ正直、上記のURLの説明は難解なので、以下のURL(のページの真ん中付近)
の説明の方がわかりやすいと思います。
http://dobon.net/vb/dotnet/string/regex.html
When I was a child, I went there.
を、
W●●● I ●● a c●●●●, I w●●● t●●●●.
と語頭以外のアルファベットと数字を●に置換したいのです。
正規表現を使えばできそうな気がしたので、
RegularExpressios.Regex.Replaceでやってみました。
自分で考えてみたのは以下です。
置換前を(¥w)¥w+
置換後を&1*
これでうまくいかないのはわかるのですが、どうすればうまくいくのかわかりません。
どうかご教授ください。