C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 正規表現で、全角半角の区別をせずにマッチしたい


(過去ログ 83 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■49433 / inTopicNo.1)  正規表現で、全角半角の区別をせずにマッチしたい
  
□投稿者/ pisces (1回)-(2010/05/04(Tue) 22:43:09)

分類:[VB.NET/VB2005 以降] 

使用言語:VB2008
正規表現というものを利用した置換を行おうとしているのですが、例えば
・これはABCです。
・これはABCです。
・これはABCです。
というテキストがあった場合、対象キーワードを"ABC"として、それぞれ
・これは<tag>ABC</tag>です。
・これは<tag>ABC</tag>です。
・これは<tag>ABC</tag>です。
というように置換を行いたいのです。
全角・半角の区別をしないのなら、
RegEx(元テキスト, "ABC", "<tag>$&</tag>")
とすればよさそうですが、全角と半角は厳密に区別されます。
オプションにより、アルファベットの大文字・小文字の区別を無視することはできるようですが、
全角と半角の区別を無視することはできないのでしょうか?
また、パターンに使用しているキーワード"ABC"は変数で持ち、当然、この変数の中身は変わり、
半角文字とは限りません。
いわゆるCompareMethod.Textみたいなものがあればいいと思っています。
よろしくお願い致します。
引用返信 編集キー/
■49436 / inTopicNo.2)  Re[1]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ やじゅ (1602回)-(2010/05/05(Wed) 00:18:27)
やじゅ さんの Web サイト
2010/05/05(Wed) 00:28:36 編集(投稿者)

No49433 (pisces さん) に返信
> 使用言語:VB2008
> 正規表現というものを利用した置換を行おうとしているのですが、例えば
> ・これはABCです。
> ・これはABCです。
> ・これはABCです。
> というテキストがあった場合、対象キーワードを"ABC"として、それぞれ
> ・これは<tag>ABC</tag>です。
> ・これは<tag>ABC</tag>です。
> ・これは<tag>ABC</tag>です。
> というように置換を行いたいのです。

アルファベットだけでよいなら、下記で出来ます。
Dim str = "これはABCです。これはABCです。これはABCです。"
TextBox1.Text = System.Text.RegularExpressions.Regex.Replace(str, "[A-zA-z]+", "<tag>$&</tag>")
結果:これは<tag>ABC</tag>です。これは<tag>ABC</tag>です。これは<tag>ABC</tag>です。

または、置換文字列の半角と全角文字を生成する。

Dim str As String = "これはABCです。これはABCです。これはABCです。"
Dim word As String = "ABC"

word += StrConv(word, VbStrConv.Wide)
TextBox1.Text = System.Text.RegularExpressions.Regex.Replace(str, "[" & word & "]+", "<tag>$&</tag>")

引用返信 編集キー/
■49438 / inTopicNo.3)  Re[2]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ pisces (2回)-(2010/05/05(Wed) 06:15:56)
No49436 (やじゅ さん) に返信

やじゅさん、ご回答ありがとうございます。

> アルファベットだけでよいなら、下記で出来ます。

実は、置換対象文字はアルファベットだけでなく、すべての文字が対象です。

> または、置換文字列の半角と全角文字を生成する。
>
> Dim str As String = "これはABCです。これはABCです。これはABCです。"
> Dim word As String = "ABC"
>
> word += StrConv(word, VbStrConv.Wide)
> TextBox1.Text = System.Text.RegularExpressions.Regex.Replace(str, "[" & word & "]+", "<tag>$&</tag>")

これだと、"ABC"以外に、"CAB"などといった"A"・"B"・"C"で構成される部分にマッチしてしまうのではないでしょうか?
今回の例では"ABC"(全角・半角問わず)のみにマッチさせたいのです。
やはり正規表現では、CompareMethod.Textみたいなことはできないのでしょうか?
もちろん、正規表現を使わなければならない程の複雑なパターンを使うわけではないので、他の方法を考えてもいいのですが、
正規表現でできれば楽だと思ったので。。。
引用返信 編集キー/
■49441 / inTopicNo.4)  Re[3]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ επιστημη (2495回)-(2010/05/05(Wed) 10:59:49)
επιστημη さんの Web サイト
検索に先立って"半角→全角変換"をカマしとけばいんじゃないかと。

引用返信 編集キー/
■49442 / inTopicNo.5)  Re[3]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ やじゅ (1603回)-(2010/05/05(Wed) 12:01:32)
やじゅ さんの Web サイト
2010/05/05(Wed) 17:14:59 編集(投稿者)

No49438 (pisces さん) に返信
> これだと、"ABC"以外に、"CAB"などといった"A"・"B"・"C"で構成される部分にマッチしてしまうのではないでしょうか?

そうですね、すみません。http://dobon.net/vb/dotnet/string/regex.html
訂正してみました。
Dim str As String = "これはABCです。これはABCです。これはABCです。これはCABです。"
Dim word As String = "[AA][BB][CC]"
TextBox1.Text = System.Text.RegularExpressions.Regex.Replace(str, word, "<tag>$&</tag>")
結果:これは<tag>ABC</tag>です。これは<tag>ABC</tag>です。これは<tag>ABC</tag>です。これはCABです。
引用返信 編集キー/
■49489 / inTopicNo.6)  Re[1]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ いしだ (224回)-(2010/05/06(Thu) 18:57:28)
2010/05/06(Thu) 19:17:29 編集(投稿者)

・キーワードをStrConvを使って全角に変換
・キーワードをStrConvを使って半角に変換
この2つを|でつなげたものを検索キーワードに指定してはどうでしょうか。
引用返信 編集キー/
■49514 / inTopicNo.7)  Re[2]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ やじゅ (1604回)-(2010/05/07(Fri) 00:59:48)
やじゅ さんの Web サイト
No49489 (いしだ さん) に返信
> ・キーワードをStrConvを使って全角に変換
> ・キーワードをStrConvを使って半角に変換
> この2つを|でつなげたものを検索キーワードに指定してはどうでしょうか。

それって、"ABC|ABC"ってことですか?
それだと"ABC"と半角と全角が混在している場合、マッチしないですよ。
引用返信 編集キー/
■49517 / inTopicNo.8)  Re[3]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ みきぬ (882回)-(2010/05/07(Fri) 07:59:55)
> いわゆるCompareMethod.Textみたいなものがあればいいと思っています。

ってことは全角・半角だけでなく、大文字・小文字もひらがな・カタカナも区別せずに探して、置換したいということだよね。

> やはり正規表現では、CompareMethod.Textみたいなことはできないのでしょうか?

CompareMethod.Text みたいなことを簡単にやる方法は、おそらくないと思う。
簡単じゃない方法は、既に回答としてあがっている通り。
引用返信 編集キー/
■49525 / inTopicNo.9)  Re[3]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ いしだ (226回)-(2010/05/07(Fri) 10:24:11)
> それって、"ABC|ABC"ってことですか?
そうです。

> それだと"ABC"と半角と全角が混在している場合、マッチしないですよ。
混在しない前提でしたが、質問内容をテキストエディタにコピペしてみたら
「・これはABCです。」
が、混在していましたね。
という事は、これじゃ駄目ですね。
引用返信 編集キー/
■49534 / inTopicNo.10)  Re[4]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ pisces (3回)-(2010/05/07(Fri) 14:09:10)
私事でご連絡が遅れまして申し訳ございません。
みなさま、コメントありがとうございました。
とりあえず、やじゅさんのアイディアをヒントに、パターン文字列を以下のようにして作成しようと思います。
(まだコード化できていませんが)
1. 検索文字を左から一文字ずつ抽出する。
2. 抽出した1文字についてStrConvで半角にしたものと全角にしたものを結合する
3. 念のため、2.で作成した文字をRegEx.Escapeでエスケープする。
4. 3.で作成したものを[]で囲み、パターン文字列に追加する。
5. 1.〜4.を繰り返し、[...][...][...]...というパターン文字列を作成する。

とりあえず、私の中では解決ということにしたいと思いますが、もしご提案がございましたらどうぞコメントください。
よろしくお願い致します。
引用返信 編集キー/
■49535 / inTopicNo.11)  Re[5]: 正規表現で、全角半角の区別をせずにマッチしたい
□投稿者/ pisces (4回)-(2010/05/07(Fri) 14:20:26)
解決済みチェックを忘れました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -