テキストボックス内の文字の置き換え

解決済みの質問

テキストボックス内の文字の置き換え

編物用の洋書を日本語に変換するものを作っています

文字を置き換えするときに
aaを11に
aaaaを2222に置き換えたいのですが

Str = RichTextBox1.Text
RichTextBox2.Text = str.Replace("aa", "11").Replace("aaaa", "2222")

と書くと aaaaが1111に置き換えられます

RichTextBox2.Text = str.Replace("aaaa", "2222").Replace("aa", "11")

と書けばよいのですが、置き換える単語は、もっと沢山あって・・・・

完全一致の単語を置き換えるという書き方は、有るのでしょうか?
あれば、是非教えてください

よろしくお願いいたします

投稿日時 - 2010-03-19 11:11:14

連想キーワード:

QNo.5763460

すぐに回答ほしいです

質問者が選んだベストアンサー

正規表現オブジェクトを使う方法があります。
応用範囲が広く、覚えておくと便利です。

Function 置換(ByVal 文字列 As String)
Dim R
Set R = CreateObject("VBScript.RegExp")
R.Pattern = "\baa\b"
文字列 = R.Replace(文字列, "11") '1回目の置換
R.Pattern = "\baaaa\b"
置換 = R.Replace(文字列, "1111") '2回目の置換
End Function

単語とあるので、aaaaやaaの前後には空白などの境界があると
判断しました。正規表現中の\bはその意味です。
もし、"aa"と"aaaa"(前後に空白などがない)のであれば、
正規表現を"^aa$"とします。

正規表現オブジェクトは下記参照
http://msdn.microsoft.com/ja-jp/library/cc392487.aspx
正規表現の構文は下記参照
http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

投稿日時 - 2010-03-19 12:08:32

補足

回答ありがとうございます

まだまだ、VB自体初心者で、
正規表現オブジェクトを勉強してみます

投稿日時 - 2010-03-19 12:46:00

お礼

正規表現オブジェクトを初めて知りました
ありがとうございました

投稿日時 - 2010-03-20 17:17:14

ANo.2

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(3件中 1~3件目)

ANo.4

置き換える対象となる文字列の長い順に処理すればいいわけですから、
以下のようにしてみては同でしょうか?

Module Module1

Sub Main()
Dim replaceList As New List(Of Replacement)
replaceList.Add(New Replacement("aa", "11"))
replaceList.Add(New Replacement("aaaa", "2222"))
replaceList.Add(New Replacement("aaa", "333"))
replaceList.Add(New Replacement("a", "4"))
replaceList.Add(New Replacement("aa", "55"))
replaceList.Sort(AddressOf SortDesc)

For Each items In replaceList
Console.WriteLine(items.Target)
Next

Console.ReadLine()
End Sub


''' <summary>
''' 文字長の長い順にソート
''' </summary>
Function SortDesc(ByVal x As Replacement, ByVal y As Replacement) As Integer
Return (y.Target.Length - x.Target.Length)
End Function

Public Class Replacement

Public Sub New(ByVal t As String, ByVal s As String)
Me._setValue = s
Me._target = t
End Sub

Private _target As String
''' <summary>
''' 置換え対象
''' </summary>
Public Property Target() As String
Get
Return _target
End Get
Set(ByVal value As String)
_target = value
End Set
End Property

Private _setValue As String
''' <summary>
''' 置換え内容
''' </summary>
Public Property SetValue() As String
Get
Return _setValue
End Get
Set(ByVal value As String)
_setValue = value
End Set
End Property

End Class
End Module

投稿日時 - 2010-03-19 12:42:14

お礼

まだ、ここまで知識が付いていきませんが
内容をひとつひとつ勉強して理解したいと思います

投稿日時 - 2010-03-20 17:18:28

ANo.3

う~ん、例が適切ではないのかな?
ちょっとやりたい事が見えないです。
純粋に、海外文書の翻訳?
単語置換えしても翻訳の助けにはならないような気がするし、翻訳ソフトを通した方がはるかにマシだし。
(翻訳ソフトの売ってない言語ってのもあり得ますが)

それとも『編物用』ってのがミソで、網目表(とでも言えばいいのかな?)が、原書と日本で使用されているもので表現が異なり、当然翻訳ソフトも使用できないので困っているというところでしょうか?

変換表を用意しておいて、変換元の単語(?)の長い順に置き換えすれば何とかなるかな?
という予想もありますが、変換先の単語内に変換元の単語が含まれていない事が保証されるかどうか、という仕様上の問題もありますね。

投稿日時 - 2010-03-19 12:09:48

補足

ありがとうございます
まだまだ、初心者で、VB自体を使いこなせてないので
質問自体が稚拙な事なのかもわかりませんが・・・・・

そうなんです
編物をされていないと分かりずらいかと思いますが
例えば
K と書いてあると、表目で
k up と書いてあると、引き上げ編み
という編み方をしてください
という意味なんです

単語も、全部分かっている訳でなく
以降、追加していこうと思っています。

投稿日時 - 2010-03-19 12:35:52

お礼

>変換表を用意しておいて
ということで、データーベース化することにしました。
まだまだ、ですが、
他の方の回答も踏まえて、頑張ってみたいと思います
ありがとうございました

投稿日時 - 2010-03-20 17:21:36

ANo.1

変換する文字列を変換優先順に配列に定義して
ループで回し順次変換すればよいかと思います。

投稿日時 - 2010-03-19 11:37:02

補足

ありがとうございます

単語も、全部分かっている訳でなく
以降、追加していこうと思っていますので、
最初に、完全一致にしておけば簡単かなぁと
単純に思ったのです。

投稿日時 - 2010-03-19 12:43:44

お礼

ありがとうございました

投稿日時 - 2010-03-20 17:19:41

あわせてチェックしたい
  • location.href="http://www.aaa.aa.aa"でリンクされない!? ...
  • AAA、AA、Aの呼び方 ...
  • "WHEREAS", "THEREFORE" ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら