たとえば、次の文字列があります。"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
\w
aと文字の間の境界に一致し\W
ます(またはその逆)
ポジティブ先読みアサーション:foo(?=bar)
一致に含まれずに、一致のfoo
後に。bar
bar
ポジティブルックビハインドアサーション:(?<=foo)bar
一致に含まれずに、bar
それが続く場合に一致します。foo
foo
(python)regex構文の詳細については、pythonregexdocsまたはperlregexdocsを検討してください。また、WebベースのPython正規表現ツールはテストに便利です。