正規表現を使用した置換で、直前に特定の文字列がない場合にのみ置換するには?
例えば、任意の文字列aaをbb等に変えたいと思っています。(本当は太字にしたい)
しかし、リッチテキストを直接いじっているのですがRTFでは、2バイト文字は
\\\'[0-9a-z][0-9a-z]\\\'[0-9a-z][0-9a-z]の形でエンコードされます。
すなわち
【1】aa
は
\'81\'791\'81\'7aaa
と表現されるわけですが
\'7aのaにヒットしてしまい、壊れてしまうんです。
今のソースは大体こんな感じです。
Dim objRegExp As New regExp '正規表現オブジェクトを作成
Dim strExpression As String
Dim strReplaceWith As String
Dim strPattern As String
strPattern = "(\\\'[0-9a-f][0-9a-f])" + "(" + rtfEnc(dic.Item("separateString")) + ")"
strReplaceWith = "$1\b " + "$2" + "\b0 "
strExpression = rtfRead
objRegExp.Pattern = strPattern '検索パターンの設定
objRegExp.IgnoreCase = True '大文字小文字区別の設定(区別する)
objRegExp.Global = True '置換候補の設定(文字列内のすべてのマッチにテストする)
strExpression = objRegExp.Replace(strExpression, strReplaceWith) 'Replace メソッドで文字列の置換
.TxtBodyFileContents.TextRTF = strExpression
「前に…がない場合のみ」ってよくありそうなものだと思うのですが、
これって正規表現を使用して1回の処理で行うことは可能でしょうか?
もしできるなら、よろしくお願いします。
すみません、独自関数が含まれていました。
まんなか辺の、
rtfEnc(dic.Item("separateString"))
は、全角をRTF形式に変換する関数です。
そんなことはいいのですが、この関数が
置換したい文字列そのものだと思ってください。
よろしくお願いします。
たびたび訂正です。
「直前に特定の文字列がない場合にのみ」
というのは誤解を招きやすい表現ですね。
文字列αと文字列βがあって
αがあったときにはそれを無視し、βのみを対象とする。
αがなければβそのものが対象となるのです。
もっと分かりにくいかもしれませんね…すみません。
ツイート | ![]() |