
これについて、助けていただけると本当にありがたいです。私は、XML スクリプトでマークアップされた大量のテキストを扱っており、いくつかのものを整理する必要があります。具体的には、角括弧で囲まれた数百の数字 (つまり、[1234] など) を削除する必要があります (括弧を含む)。数字はそれぞれ異なり、これらの数字には 3 桁から 5 桁の数字が含まれることがあります。
次に必要なのは、他のテキストの周囲に XML タグを配置することです。これらは丸括弧で囲まれた名前です。つまり、次のようになります。
彼(スミス氏)は言いました...
変更したい内容:
彼は<annot> (Mr. Smith) </annot>
言った...'。
これら両方の変更を実行するにはどうすればよいでしょうか?
すでに拡張モードを使用して '[.*]' を検索してみましたが、ヒットは返されませんでした。同じことを RegEx で試すと、ヒットはたくさん返されますが、コーパス内のすべての角括弧を検索しているようです。
答え1
角括弧は正規表現では特別なトークン(から までの[a-z]
範囲の任意の文字を意味する)なので、エスケープする必要があります。a
z
検索式は\[\d+\]
( \d+
1 つ以上の数字を意味します) になります。ただし、これを数字のみに置き換えたいとします。括弧を使用してキャプチャ グループを設定し、置換式でそれを参照する必要があります。設定は次のようになります。
- 検索する:
\[(\d+)\]
- と置換する:
\1
2 番目の問題については、あなたが示したコンテキストを正しく理解できているかわかりません... 名前だけが括弧内であれば、\([^\)]+\)
に置き換えることができます。<annot> \0 </annot>
または、\(Mr\. [^\)]+\)
名前の前に が付いている場合は、に置き換えることができますMr.
。
詳細を説明すると、その仕組みは次のようになります。
- 検索する括弧はエスケープする必要があります(括弧は通常キャプチャグループを定義するために使用されるため
\(
、\)
[^...]+
1つ以上の文字が...
- したがって、検索式は開き括弧、その後に閉じ括弧以外の文字 (名前と一致するはず)、その後に閉じ括弧が続きます。
\0
置換領域内の検索された表現全体を表す
置換する名前のリストがある場合は、それを\(whatever name\)
検索式として使用した方がよいでしょう。リストがない場合は、正規表現で何が名前で何がそうでないかを「推測」することができないため、不可能です。