2

たとえば、次の文字列があります。"http://www.google.com/this_is_our_network/"

「work」という単語と一致させたいのですが、最初または最後にアルファベット文字がありません。上記の例では、正規表現は一致を返さないはずです。

ただし、この文字列"http://www.google.com/work_for_us.html"では、最初にも最後にもアルファベット文字がないため、正規表現は一致するはずです。

4

1 に答える 1

6

この正規表現を試してください:(?<=[\W_])work(?=[\W_])

これは、ポジティブルックアヘッドアサーションとルックビハインドアサーションを使用して、囲んでいる文字を尊重しますが、それらを一致に含めません。

この正規表現は一致しますwork

  1. \W文字またはアンダースコア の後に続く場合
    AND
  2. \Wその後に文字またはアンダースコアが続く場合。

\b_ここでは不要な一致があるため、単語境界の一致は使用できません\w


さらなる例:

  • 複数の単語の一致:
    (?<=[\W_])(work|job)(?=[\W_])

  • 上記と同じですが、サブマッチを作成しません。
    (?<=[\W_])(?:work|job)(?=[\W_])

  • ラインエンドも尊重します。
    (?<=[\W_])(?:work|job)(?=[\W_]|$)


正規表現構文に関するいくつかの有用な注意事項:

  • \wすべての英数字とアンダースコアに一致します。これはと同等です[a-zA-Z0-9_]

  • \Wの正反対に一致します\w

  • \b\waと文字の間の境界に一致し\Wます(またはその逆)

  • ポジティブ先読みアサーション:
    foo(?=bar)一致に含まれずに、一致のfoo後に。barbar

  • ポジティブルックビハインドアサーション:
    (?<=foo)bar一致に含まれずに、barそれが続く場合に一致します。foofoo

(python)regex構文の詳細については、pythonregexdocsまたはperlregexdocsを検討してください。また、WebベースのPython正規表現ツールはテストに便利です。

于 2012-08-04T12:33:39.650 に答える