たとえば、次の文字列があります。"http://www.google.com/this_is_our_network/"
「work」という単語と一致させたいのですが、最初または最後にアルファベット文字がありません。上記の例では、正規表現は一致を返さないはずです。
ただし、この文字列"http://www.google.com/work_for_us.html"では、最初にも最後にもアルファベット文字がないため、正規表現は一致するはずです。
この正規表現を試してください:(?<=[\W_])work(?=[\W_])
これは、ポジティブルックアヘッドアサーションとルックビハインドアサーションを使用して、囲んでいる文字を尊重しますが、それらを一致に含めません。
この正規表現は一致しますwork
\W文字またはアンダースコア
の後に続く場合\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正規表現ツールはテストに便利です。