- PR -

正規表現での置換

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-02-20 11:58
正規表現で
ャュョァィゥェォッなど半角カナ小文字を半角カナ大文字に変換したいと考えています。

簡単に置換できると思っていたのですが・・・
Replaceメソッドを使用するのが初めてで、色々調べてみると
MatchEvaluatorを使用した方法(?)になるのでしょうか?
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-02-20 12:45
正規表現ではないですが、StringのReplaceメソッドで地道にやってはどうでしょうか?

こんな感じ。
コード:

Dim s As String = 置換元の文字列
Dim table As New Hashtable
table("ァ"c) = "ア"c
table("ッ"c) = "ツ"c
: 略

For Each k As Char In table .Keys
s = s.Replace(k, DirectCast(table(k), Char))
Next


※.NET Framework1.1相当のVBによる記述ですが、内容はだいたい伝わるかと思います。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2007-02-20 13:04 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-20 13:22
引用:
簡単に置換できると思っていたのですが・・・
Replaceメソッドを使用するのが初めてで、色々調べてみると
MatchEvaluatorを使用した方法(?)になるのでしょうか?

間違いを少なくするには自分の理解しやすい方法でやるのが一番なわけで、そういう意味で
よねKENさんと同意見ですが、RegexのReplaceを使うのであればMatchEvaluatorを使うことになります。
デリゲートというものを理解する必要があります。大雑把にいうと呼ぶメソッドを
動的に決められる仕組みみたいなもんです。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-02-20 16:49
MatchEvaluatorデリゲートは知らなかったので、
サンプルを作ってみました。参考までに。

※あくまでサンプル用の適当なコードなので、
MatchEvaluatorデリゲートでの処理方法の参考としてください。
VBで書いてますので、C#など別の言語をお使いの場合は適宜読み替えてください。
コード:
Imports System
Imports System.Text.RegularExpressions

Module Test
	Public Sub Main()
		Dim s As String = "あいうァABCァッ123ッccccァ+-ャュョァィゥェォッaaa"
		Dim rg As New Regex("[ャュョァィゥェォッ]")

		s = rg.Replace(s, AddressOf MyMatchEvaluator)
		Console.WriteLine(s)
	End Sub

	Public Function MyMatchEvaluator(ByVal match As Match) As String
		Select Case match.Value
			Case "ャ"
				Return "ヤ"
			Case "ュ"
				Return "ユ"
			Case "ョ"
				Return "ヨ"
			Case "ァ"
				Return "ア"
			Case "ィ"
				Return "イ"
			Case "ゥ"
				Return "ウ"
			Case "ェ"
				Return "エ"
			Case "ォ"
				Return "オ"
			Case "ッ"
				Return "ツ"
		End Select
	End Function
End Module

1

スキルアップ/キャリアアップ(JOB@IT)