言語:VBA 環境:2007 エクセル ツール:正規表現オブジェクト重複する単語を入力文字列から削除します。使用VBA正規表現
こんにちは!私はアドレスを表す入力文字列から重複した単語を削除しようとしています。 アドレス帳を組み合わせたExcelワークシートの列が表示されます。それはキリル文字ではありませんが、英語で表現するためならば、それはこのようなものを見てみましょう:
125424, RepeatedName, RepeatedName, and some words, 75
194044, Repeated-dashedName, Repeated-dashedName, other Uniques, 3
300911, Normal non-repeated, names, dashed and non-Dashed, 123
テキストは大文字と小文字を区別しないで、数字、句読点、スペースを含めることができます。重複する単語はまったく別のものにしか現れないことが知られています。重複するインスタンスの中には、昏睡やスペース以外の他の「排他的」な単語はありません。 重複した破線と破線のない単語を削除し、繰り返される単語が1つの場合は1つのインスタンスのみを保持する必要があります。 "RepeatedName"の唯一のインスタンスを "Repeated-dashedName"と同じにする必要があります。だから、理想的な結果は次のようになります。
125424, RepeatedName, and some words, 75
194044, Repeated-dashedName, other Uniques, 3
300911, Normal non-repeated, names, dashed and non-Dashed, 123
私はコードの異なるバリエーションを試してみたが、働いても私から脱出され、これを解決するために。私の最高の推測では、このです:
Option Explicit
Dim strIn As String, strPattern As String, strReplace As String, strResult as String
dim regex As Object
strIn = fnGetInputString()
strPattern = ".*\b((\w+)\b.*\1).*"
strReplace = "$1"
If regex Is Nothing Then Set regex = New RegExp
With regex
.MultiLine = False
.Global = True
.IgnoreCase = True
.Pattern = strPattern
End With
strResult = regex.Replace(strIn, strReplace)
が、結果として、私のstrResultは、結果的に私に与えただけで、この:
75
3
123
だから私は正しくキャプチャし、正規表現で繰り返しグループを再利用するために管理していません。 助けていただければ幸いです。
私はregexの新機能ですが、いくつかのドキュメント、記事、ディスカッション、およびStackOverflowの質問を読んでいますが、実際の答えは見つかりませんでした。この正規表現は、たとえば上で動作
などの基本的な正規表現エンジンで、我々は125424 'のようなケースを持つことができます動作しますが、Repea tedName、someOtherWord、RepeatedName、およびいくつかの単語、75'ここで、repeatNameの2番目のインスタンスは文字列のどこにでも(つまり、1番目のインスタンスの直後ではなく)どこにでも置くことができますか? – Gurman
この可能性はゼロではありませんが、それに近いです。そのような場合は無視できます。 –