正規表現を使用して文字列を検索および置換する (高度)

ワイルドカード文字を使用して "正規表現"(リテラル文字列とワイルドカードの組み合わせ) を作成すると、検索および置換の操作の多くを自動化することができます。

たとえば、正規表現を使用すると、大きな表で重複している行を検索して削除したり、名前の一覧を変換したりできます ("名姓" から "姓, 名" に変換するなど)。

この記事の内容

用語

演習

正規表現の動作

検索と置換で使用するワイルドカード

ワイルドカードを使用して文字列を検索および置換する

使用できるワイルドカード

正規表現を使用する

例 1: ミドル ネームを含む名前を変換する

式の各部分

例 2: 日付を変換する

式の各部分

正規表現での区切り文字の使用について

例 3: 敬称にピリオドを追加する、または敬称からピリオドを削除する

例 4: 重複している段落または行を検索する

その他の例

著者について

用語

最初に、いくつかの用語について説明します。

  • "ワイルドカード文字"とは、1 つまたは複数の文字を表すために使用できるキーボードの文字のことです。たとえば、通常、アスタリスク (*) は 1 つまたは複数の文字を表し、疑問符 (?) は 1 つの文字を表します。

  • ここでは、文字列のパターンを検索および置換するために使用するリテラル文字およびワイルドカード文字の組み合わせを、"正規表現"と呼びます。リテラル文字は、ターゲットの文字列に存在している必要がある文字列を示します。ワイルドカード文字は、ターゲットの文字列内のさまざまな文字列を示します。

ページの先頭へ

演習

以下の手順では、名前を変換する正規表現を使用する方法について説明します。正規表現を実行するには、常に [検索と置換] ダイアログ ボックスを使用します。また、式が目的どおりに動作しない場合は、いつでも Ctrl キーを押しながら Z キーを押して変更を元に戻し、別の式を試すことができます。

名前を変換するには

  1. Word を起動し、新しい白紙の文書を開きます。

  2. 次の表をコピーして文書に貼り付けます。

Josh Barnhill

Doris Hartwig

Tamara Johnston

Daniel Shimshoni

  1. [ホーム] タブの [編集] で [置換] をクリックして [検索と置換] ダイアログ ボックスを表示します。

    Office 14 Ribbon

  2. [ワイルドカードを使用する] チェック ボックスが表示されない場合は、[オプション] をクリックし、このチェック ボックスをオンにします。チェック ボックスをオンにしない場合、ワイルドカード文字は文字列として扱われます。

  3. [検索する文字列] ボックスに次の文字を入力します。2 組のかっこの間には必ずスペースを含めます。

    (<*>) (<*>)

  4. [置換後の文字列] ボックスに、次の文字列を入力します。コンマと 2 つ目の円記号の間には必ずスペースを含めます。

    \2, \1

  5. 表を選択し、[すべて置換] をクリックします。名前が変換され、次のようにコンマで区切られます。

Barnhill, Josh

Hartwig, Doris

Johnston, Tamara

Shimshoni, Daniel

ここで、一部またはすべての名前にミドル ネームが含まれているときはどうすればよいでしょうか。この詳細については、「正規表現を使用する」の最初の例を参照してください。

ページの先頭へ

正規表現の動作

以下では、文書の内容によって、正規表現のデザインのほとんどが決まるという原則に留意してください。たとえば、前に使用したサンプルの表では、各セルに 2 つの単語が含まれていました。セルに 2 つの単語とミドル ネームが含まれている場合は、異なる式を使用します。

各式について詳細に説明します。

最初の式である (<*>) (<*>)では、

  • アスタリスク (*)により、単語内のすべての文字列が返されます。

  • 小なり記号と大なり記号 (< >)は、それぞれ各単語の先頭と末尾を示します。これらの記号により、検索で必ず 1 つの単語が返されるようになります。

  • かっこおよびその間のスペースにより、単語が明確なグループ (最初の単語) (2 つ目の単語) に分割されます。かっこは、各式を評価する順序も示します。

言い換えると、この式の意味は "両方の単語を検索する" ということです。

2 つ目の式である \2, \1では、

  • 円記号 (\)は数値と共にプレースホルダーとして使用します (円記号を使用して他のワイルドカード文字を見つけることもできます。詳細については、次のセクションを参照してください)。

  • 最初のプレースホルダーの後のコンマにより、変換された名前の間に適切な句読点が挿入されます。

言い換えると、この式の意味は "2 つ目の単語を記述し、コンマを追加し、最初の単語を記述する" ということです。

ページの先頭へ

検索と置換で使用するワイルドカード

ワイルドカードとしてアスタリスク (*) などを使って、文字列を検索できます。たとえば、「s*d」と入力すると、"sad" や "started" などが検索されます。

ワイルドカードを使用して文字列を検索および置換する

  1. [ホーム] タブの [編集] で [検索] の横の矢印をクリックし、[高度な検索] をクリックします。

    Office 14 Ribbon

  2. [ワイルドカードを使用する] チェック ボックスをオンにします。

    [ワイルドカードを使用する] チェック ボックスが表示されていない場合は、[オプション] をクリックします。

  3. 次のいずれかの操作を行います。

    • 一覧からワイルドカード文字を選択するには、[特殊文字] をクリックし、目的のワイルドカード文字をクリックします。次に、[検索する文字列] ボックスに必要な文字を追加入力します。詳細については、「使用できるワイルドカード」の表を参照してください。

    • [検索する文字列] ボックスに、ワイルドカード文字を直接入力します。詳細については、「使用できるワイルドカード」の表を参照してください。

  4. 項目を置換する場合は、[置換] タブをクリックし、[置換後の文字列] ボックスに置換後の文字列を入力します。

  5. [次を検索]、[すべて検索]、[置換]、または [すべて置換] をクリックします。

    実行中の検索を取り消すには、Esc キーを押します。

使用できるワイルドカード

  

  • [ワイルドカードを使用する] チェック ボックスをオンにすると、入力した文字に完全に一致する文字列だけが検索されます。つまり、[大文字と小文字を区別する] チェック ボックスと [完全に一致する単語だけを検索する] チェック ボックスは自動的にオンになり、淡色表示されます。この 2 つのチェック ボックスをオフにすることはできません。

  • ワイルドカードとして定義された文字を検索するには、文字の前に円記号 (\) を入力します。たとえば、疑問符を検索するには「\?」と 入力します。

  • かっこを使ってワイルドカードと文字列を入力すると、検索条件の優先順位を指定することができます。たとえば、「<(pre)*(ed)>」と入力すると、"presorted"や"prevented" が検索されます。

  • ワイルドカード \n を使うと、式を検索し、語順を変更したものと置換することができます。たとえば、[検索する文字列]ボックスに「(Ashton) Chris)」と入力し、[置換後の文字列]ボックスに「\2 \1」と入力すると、 Ashton Chrisが検索され、Chris Ashtonに置き換えられます。

検索対象

種類

任意の 1 文字

?

「s?t」と入力すると "sat" や "set" を検索できます。

任意の長さの文字列

*

「s*d」と入力すると "sad" や "started" を検索できます。

単語の先頭

<

「<(inter)」と入力すると "interesting" や "intercept" は検索できますが、"splintered" は検索できません。

単語の末尾

>

「(in)>」と入力すると "in" や "within" は検索できますが、"interesting" は検索できません。

指定した文字のいずれか

[ ]

「w[io]n」と入力すると "win" と "won" の両方を検索できます。

指定した範囲内の任意の 1 文字

[-]

「[r-t]ight」と入力すると "right" や "sight" を検索できます。範囲は昇順で指定します。

かっこ内の範囲に含まれる文字を除く任意の 1 文字

[!x-z]

「t[!a-m]ck」と入力すると "tock" や "tuck" は検索できますが、"tack" や "tick" は検索できません。

直前の文字または式を n 個

{n}

「fe{2}d」と入力すると "feed" は検索できますが、"fed" は検索できません。

直前の文字または式を n 個

{n,}

「fe{1,}d」と入力すると "fed" や "feed" を検索できます。

直前の文字または式を n ~ m 個

{n,m}

「10{1,3}」と入力すると "10"、"100"、および "1000" を検索できます。

直前の文字または式を 1 個以上

@

「lo@t」と入力すると "lot" や "loot" を検索できます。

ページの先頭へ

正規表現を使用する

以下の例では、Microsoft Word でワイルドカード文字および正規表現を使用するいくつかの方法を示します。

例 1: ミドル ネームを含む名前を変換する

この例では、ワイルドカード文字と文字コードを組み合わせて、ミドル ネームを含む名前を変換します。文字コードに精通していない場合は、Word のヘルプ トピック「Word 2010 ファイル内の文字列その他のデータを検索および置換する」を参照してください。

作業を進めるにあたって、次のことに留意してください。

  • 表に存在する名前に対してこの式を使用するたびに、まず表を文字列に変換する必要があります。

  • 表に複数の列が含まれている場合は、名前が含まれている列を空白の文書にコピーし、そこで文字列に変換します。

  • 名前を変換したら、文字列を変換して表に戻します。次に、元の列を削除して 変更されたデータと置き換えることができます。

サンプル データを準備するには

  1. 既に行っていない場合は、Word を起動し、新しい空白の文書を作成します。

  2. 空白の表を文書に挿入します。1 列 4 行の表を作成します。

  3. 以下の名前を個別にコピーし、空白の表のセルに貼り付けます。

    Joshua Quentin Barnhill
    Doris X. Hartwig
    Tamara Y. Johnston
    Daniel Shimshoni

    表は次のようになります。

Joshua Quentin Barnhill

Doris X. Hartwig

Tamara Y. Johnston

Daniel Shimshoni

  1. 表を選択し、[表ツール] の [レイアウト] タブの [データ] で [テキストに変換] をクリックします。

  2. 区切り文字として [段落記号] を選択し、[OK] をクリックします。

ミドル ネームを含む名前を変換するには

  1. [ホーム] タブの [編集] で [置換] をクリックして [検索と置換] ダイアログ ボックスを表示します。

  2. [ワイルドカードを使用する] チェック ボックスをオンにし (このチェック ボックスを表示するには [オプション] をクリックしなければならない場合があります)、[検索する文字列] ボックスに次の式を入力します。

    (*) ([! ]@)^13

    2 組のかっこの間、および感嘆符の後には、必ずスペースを入力します。^13 文字については、次のセクションで説明します。

  3. [置換後の文字列] ボックスに、次の式を入力します。

    \2, \1^p

  4. 名前の一覧を選択し、[すべて置換] をクリックします。名前とミドル ネームが変換され、次のようになります。

    Barnhill, Joshua Quentin
    Hartwig, Doris X.
    Johnston, Tamara Y.
    Shimshoni, Daniel

変更された文字列を変換して表に戻すには

  1. 変換された名前の一覧を選択します。

  2. [挿入] タブの [] で [] をクリックし、[文字列を表にする] をクリックします。

    [文字列を表にする] ダイアログ ボックスが表示されます。

  3. [文字列の区切り] の [段落] をクリックし、[OK] をクリックします。

式の各部分

式の個別の部分に注目し、その機能について学習しましょう。まず、[検索する文字列] ボックスの式から始めます。

式全体では、名とミドル ネーム、および姓という 2 つのパターンのグループが検索されます。(*) により、すべての名が検索されます。この後にスペースがあることに注目してください。

式のこの部分は姓に一致します。

([! ]@)^13

感嘆符により、かっこ内に指定された任意の文字が除外されます。この場合、[! ] は "スペースを除くすべてを検索する" ことを意味します。この目的は、姓の前にあるスペースを削除することです。

@ 文字では、前の文字の 1 つまたは複数の繰り返しが検索されます。これにより、姓の前にあるすべてのスペースが確実に削除されます。

どこで姓が終わるのかを知る必要があるので、^13 文字を使用して、各行の最後にある段落記号を検索します。ただし、段落記号を再利用することはないので、その他すべてをかっこで囲みます。

再びテスト文書に名前をコピーし (必ず名前を段落記号で区切ってください)、([!]@)^13を [検索する文字列]ボックスで使用して、この操作を試すことができます。姓が検索されます。

検索は次の行の先頭で再び開始されるので、アスタリスク ワイルドカード文字 (*)を使用して、行の先頭から次の姓の先頭までを検索します。

姓の前にあるスペースは再利用しないので、次のようにかっこを使って 2 組のグループからスペースを除外します。

(*) ([! ]@)^13

重要   ^13 文字コードを使用するときは注意してください。通常、段落記号を検索するには ^p 文字を使用できます。ただし、このコードはワイルドカード検索では使用できません。この代わりに、代替コード ^13 を使用する必要があります。^p 文字コードはワイルドカード検索では使用できませんが、ワイルドカードの置換操作では使用します。理由としては、 ^p 文字には書式情報が含まれていますが、^13 文字には含まれていません。さらに、スタイル情報を ^13 文字に割り当てることはできません。置換操作で ^13 文字を間違って使用すると、文書は書式を設定できないファイルに変換される可能性があります。

"置換" 式 (\2 \1)により、実際の変換が実行されます。[置換後の文字列] ボックスで \2,を指定すると、2 つ目のパターンが最初に記述され、パターンの後にコンマが追加されます。\1^pでは、最初のパターンを記述する場所と、パターンの後に段落記号を記述することが指定されます。

例 2: 日付を変換する

ここで説明する正規表現を使用すると、ヨーロッパ書式の日付を米国 書式に変換できます。

日付を変換するには

  1. 日付 28th May 2003をコピーして文書に貼り付けます。

  2. [検索と置換] ダイアログ ボックスを表示し、次の式を [検索する文字列] ボックスに入力します。

    ([0-9]{1,2})([dhnrst]{2}) (<[ADFJMNOS]*>) ([0-9]{4})

    開きかっこと閉じかっこの間には、2}) (<[ と *>) ([0 のように必ずスペースを挿入します。

  3. 次の式を [置換後の文字列] ボックスに入力します。

    \3 \1, \4

    文字セットの間には必ずスペースを挿入します。

  4. [すべて置換] をクリックします。

    28th May, 2003 が May 28, 2003 に置換されます。

式の各部分

[検索する文字列] ボックスの式から説明します。この式では、かっこの組で示される 4 つのパターンに日付が分割されます。各パターンには、例で使用したスタイルで記述されたすべての日付にあるコンポーネントが含まれています。左から右の順に説明します。

  • 数値範囲である [0-9]は、最初のパターンの 1 桁の数値に一致します。日付は 2 つの数値で構成されることがあるので、{1,2}により、1 桁または 2 桁のどちらかの日付を返すように指定します。そのため、最初のパターン ([0-9]{1,2})を指定します。

    2 つ目のパターン構成は序数です。序数は "th"、"nd"、"st"、および "rd" で構成されるので、これらの文字を範囲 [dhnrst]に追加します。序数は常に 2 つの文字で構成されるので、([dhnrst]{2})のように文字数のカウントを 2 に制限します。

  • 次にスペースを指定し、その後に月の名前を検索するリテラル文字およびワイルドカード文字を続けます。すべての月の名前は、ADFJMNOSのいずれかの大文字で始まります。各大文字の後の文字数はわからないので、アスタリスク (*)を続けて指定します。ここで重要なのは月の名前だけなので、大なり記号および小なり記号を使用して結果を個別の単語に制限します。その結果、3 つ目のパターンである (<[ADFJMNOS]*>)となります。

  • 最後に、年を検索します。同じ数値範囲を使用しますが、カウントを 4 つの文字である ([0-9]{4})に制限します。

[置換後の文字列] ボックスでは、4 つのアドレス パターンのうち 3 つのみを記述しました。日付から序数 ("th") を省略しましたが、これは米国書式では、 序数を使用しないためです。日付の序数をそのまま使用する場合は、「\3 \1\2, \4」を[置換後の文字列] ボックスに入力します。この場合は、3 の後およびコンマの後の両方にスペースを入力します。ただし、他の場所には入力しません。

ここで、28/05/03 など、月の名前がスペル アウトされていない日付の扱いはどうなるのでしょうか。次の式を使用して検索を実行します。

([0-9]{1,2})/([0-9]{1,2})/([0-9]{2})

次の式を使用して置換を実行します。

\3/\1/\2

日付の形式が 28/05/2003 の場合は、最後のパターンで {2}の代わりに {4}を使用します。

正規表現での区切り文字の使用について

前の例では、引数 {1,2}を使用して 1 桁または 2 桁の日付を検索しています。この場合、コンマによって 2 つの値が区切られます。ただし、使用する区切り文字は Windows の地域の設定によって制御されます。地域の設定で、区切り文字としてセミコロンの使用が指定されている場合は、コンマではなくセミコロンを使用する必要があります。

オペレーティング システムで指定されている区切り文字を確認するには、次の操作を行います。

Windows 7 の場合

  1. ボタンの画像 ([スタート] ボタン) をクリックし、[コントロール パネル] をクリックします。

  2. [時計、言語、および地域] をクリックします。

  3. [日付、時刻または数値の形式の変更] をクリックし、[その他の設定] をクリックします。

  4. [数値] タブをクリックし、[区切り文字] を見つけます。

Windows Vista の場合

  1. ボタンの画像 ([スタート] ボタン) をクリックし、[コントロール パネル] をクリックします。

  2. [時計、言語、および地域] をクリックします。

  3. [地域と言語のオプション] をクリックします。

  4. [形式] タブの [現在の形式] で [この形式のカスタマイズ] をクリックします。

  5. [数値] タブをクリックし、[区切り文字] を見つけます。

Windows XP の場合

  1. [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。

  2. [地域と言語のオプション] をダブルクリックします。

  3. [地域] タブで、[カスタマイズ] をクリックします。

  4. [数値] タブをクリックし、[区切り文字] を見つけます。

例 3: 敬称にピリオドを追加する、または敬称からピリオドを削除する

一部の国では、敬称 (Mr.、Mrs. など) にピリオドが含まれない場合があります。この例では、敬称にピリオドを追加する方法、および敬称からピリオドを削除する方法について示します。以下の説明では、[検索と置換] ダイアログ ボックスの使用方法に精通していることを前提としています。

次の式では、ピリオドのない Mr、Ms、Mrs、および Dr が検索されます。

<([DM][rs]{1,2})( )

この式では、空白を含む 2 つ目のパターンが使用されています。通常、ピリオドがない場合に、敬称の後にこのスペースが続きます。次の式でピリオドが追加されます。

\1.\2

その反対の処理を実行するには、次の式を使用して検索を行います。

<([DM][rs]{1,2})

置換するには、次の式を使用します。

\1

例 4: 重複している段落または行を検索する

この式を使用する場合は、最初に一覧を並べ替えて、重複している行を連続して配置してください。また、空白の段落はすべて削除する必要があります。言い換えると、空白の段落を使用して文字列のブロックを区切ると、次のようになります。

Joshua Quentin Barnhill¶

Joshua Quentin Barnhill¶

Doris X. Hartwig¶

これらの段落は削除し、次のようにする必要があります。

Joshua Quentin Barnhill¶
Joshua Quentin Barnhill¶
Doris X. Hartwig¶

空白の段落を削除するには任意の方法を使用できますが、ここでは正規表現について説明しているので、2 つの連続する段落文字を検索する方法を示します。次の式を使用して検索を実行します (@文字は検索および置換操作を繰り返し、複数の空白行を削除します)。

(^13)\1@

次の式で結果を置き換えます。

^p

ここで、文字列を置き換える方法を説明します。次の式では、連続する 2 つの同じ段落が検索されます。

(*^13)\1

この式では、段落記号で終了する文字列のより長い繰り返しも検索されます。たとえば、次の一覧に対してこの式を実行します。

Joshua Quentin Barnhill¶
Doris X. Hartwig¶
Joshua Quentin Barnhill¶
Doris X. Hartwig¶
Tamara Y. Johnston¶

最初の 4 つの行が検索され、パターン全体が変化したときのみ、検索が中止されます。一方、次の一覧に対してこの式を実行するとします。

Joshua Quentin Barnhill¶
Joshua Quentin Barnhill
Doris X. Hartwig¶
Doris X. Hartwig¶

式の結果として、最初の 2 つの段落のみが検索されます。 

より多くの同じ項目を検索するには、さらにプレースホルダーを追加します。たとえば、次の式では連続する 3 つの同じ段落が検索されます。

(*^13)\1\1

中かっこを使用しても、同じことを実行できます。次の例では、それぞれ 2 つおよび 3 つの同じ段落が検索されます。

(*^13){2}
(*^13){3}

2 つまたは 3 つの同じ段落のどちらかを検索するには、次の式を実行します。

(*^13){2,3}

2 つ以上の同じ段落を検索することもできます。

(*^13){2,}

これらのいずれの式も、次の文字列で置き換えることができます。

\1

さらに、必要に応じて検索および置換の操作を繰り返して、文書内の重複しているすべての段落を置き換えたり、@ ワイルドカード文字を追加し、式で操作を繰り返すことができます。

(*^13)\1@

表内の重複している行を置き換える場合も、この方法を使用します。そのためには、結合されたセルを最初に削除し、表を並べ替えて、重複しているセルを隣接して配置します。次に、表を文字列に変換します ([罫線] メニューの [変換] をポイントし、[表の解除] をクリックします。メッセージが表示されたら、タブ区切りを使用します)。置換を行ったら、文字列を変換して表に戻します。

その他の例

Word での正規表現のその他の使用例については、MVP FAQ サイトの「ワイルドカードを使用して文字列を検索および置換する」を参照してください。

著者について

この記事は、元の Microsoft Word Most Valuable Professionals (MVP) である Graham Mayor 氏および Klaus Linke 氏の協力により作成されたコンテンツをまとめたものです。MVP および MVP プログラムの詳細については、Microsoft MVP サイトおよび MVPs.org を参照してください。

ページの先頭へ

適用対象: Word 2010



この情報は役に立ちましたか?

はい いいえ

どのようにしたら改善できるでしょうか?

255 残りの文字数

お客様のプライバシーを保護するため、フィードバックには連絡先情報を含めないでください。 レビューしてください プライバシー ポリシー

ご意見をいただきありがとうございます。

サポート リソース

言語の変更