次の形式でWord2010のテキストを検索しようとしています:ABC.DEF.XYZ。これは基本的に、Word文書に記述されたJava構文を使用して、コード参照を見つけることです。3要素の参照は単なる例であることに注意してください。実際の参照には最低2つの要素があります。 5つの要素に。
これを機能させるために、ワイルドカード(およびワイルドカード以外)の組み合わせを多数試しましたが、うまくいきませんでした。これが私が試したことのいくつかです:
<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
注、これは実際には2要素の参照を見つけるために機能します。より大きな文字列内のパターンを見つけるときにヒットまたはミスが発生しました(たとえば、3要素の参照の要素2と3に一致する)
<([a-z0-9A-Z]@)>(.<([a-z0-9A-Z]@)>)@
エラーが発生します-無効なパターン
<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
実行に時間がかかるため、Wordが15分以上ハングし、一致するものが1つも見つかりませんでした(ドキュメントは約150ページのテキストであるため、処理するには多すぎた可能性があります)
<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
理想的には、#2の動作バージョンが理想的だと思いますが、パターンを有効にする方法がわかりません。
これが不可能な場合は、#1を使用して、すべてをキャッチできることを期待できます(特定の文字列と一致し、他の文字列と一致しない理由がわかりません)。
どんな助けでも大歓迎です。
Wordのワイルドカード検索の代わりに、WordのVBARegExエンジンを使用できます。
わかりました、タスクは次のパターンですべての文字列を見つけることでした
_###.###
###.###.###
###.###.###.###
###.###.###.###.###
_
私が作成できる最高のパターンは
_([\w\d]{3}\.){1,4}[\w\d]{3}
_
黄色でマークされた次のヒットを返します
\w
_は、A〜zの1文字に一致します。大文字と小文字は区別されません\d
_は0〜9の数字と一致します[\w\d]{3}
_は、ABC
、abc
、_123
_、_Ab1
_のような3文字または数字に一致しますが、_A$C
_またはABCD
には一致しません([\w\d]{3}\.){1,4}
_は、次のポイント_\.
_を持つ1、2、3、または4つのグループに一致します。最後のグループ_[\w\d]{3}
_は次の点を要求しません押す ALT+F11 VBAエディターを開きます。コードをどこかに貼り付けて実行します F5
_Sub RegExMark()
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = "([\w\d]{3}\.){1,4}[\w\d]{3}"
Set Matches = RegEx.Execute(ActiveDocument.Range)
For Each hit In Matches
Debug.Print hit
ActiveDocument.Range(hit.FirstIndex, hit.FirstIndex + hit.Length). _
HighlightColorIndex = wdYellow
Next hit
End Sub
_
サンプル画像で赤でマークされているように、現在のパターンには欠陥があり、長すぎる文字列の部分文字列にも一致します。 _\b
_、_[^\.]
_、_\s
_で少し遊んだのですが、いずれもうまくいきませんでした。たぶん他のユーザーは有効な解決策を見つけることができますか?
テキストをNotepad ++にコピーしてから、RegExオプションを使用して変更を加えることをお勧めします。
苦痛に聞こえるかもしれませんが、慣れれば、プログラム間をすばやく移動できます。
RegExは、Notepad ++の[検索/置換]ウィンドウのオプションです。他のエディターにも同じ機能があります。
イワン