\1とは?
- エンジニアD
- 4月2日
- 読了時間: 2分
こんにちは。
最近勉強し始めたPythonで理解に苦しんだ表現がありましたので、紹介します。
初心者に向けて解説をしていた記事がネットにあまりなかったので、少しでも参考になれば幸いです。
「\1」の意味が分からなかったときに、まずとった行動はネットで検索。
するとどうやら以下の意味があるとのこと。
・\1は同じパターンの文字列を抽出している
「。。。」
「同じパターンのグループ?」
調べていくうちに「?」が頭の中を周回し始めました笑
同じグループのパターンとはいったい何のことだろう...?
そこで、実際にコードを書いて検証してみることにしました。
いくつか書いてみると、段々と納得できるようになりました。
今回は理解するうえで有益だと感じた3つのコードを紹介します。
コード①
print(re.findall(r"([a-z]+) \1", "tennis baseball soccer soccer"))
> ['soccer']
上記コードは、「tennis baseball soccer soccer」から「([a-z]+) \1」に該当する箇所を抜き出すものです。
実行結果は、「soccer」になりました。
つまり、連続した文字を抜き出しています。
(プログラム内で用いた正規表現)
[a-z]:a~zまでのいずれかの文字
+:直前のパターンを1回以上繰り返す
コード②
text = 'tennis baseball soccer soccer'
new_text = re.sub("(baseball) (soccer)", r'\1', text)
print(new_text)
>tennis baseball soccer
上記コードは、sub関数を用いて、text内の「(baseball) (soccer)」に該当する箇所を「\1」に該当する文字列で置換した文字列を出力するものです。
実行結果は、「tennis baseball soccer」になりました。
つまり、「(baseball) (soccer)」内の「\1」に該当する文字列は「baseball」になります。
コード③
text = 'tennis baseball soccer basketball'
new_text = re.sub("(baseball) (soccer)", r'\2', text)
print(new_text)
>tennis soccer basketball
上記コードは、sub関数を用いて、text内の「(baseball) (soccer)」に該当する箇所を「\2」に該当する文字列で置換した文字列を出力するものです。
実行結果は、「tennis baseball soccer」になりました。
つまり、「(baseball) (soccer)」内の「\2」に該当する文字列は「soccer」になります。
ここまで読んでくださった方は、なんとなく「\1」の意味が分かったのではないでしょうか。
私が出した結論は、
\1は、マッチした文字列の1つ目を指している
ということです。
少しでも初心者の方が参考になりますと幸いです。
また、もしかしたら不適切な表現が存在したかもしれませんが、暖かい目で見守っていただけますと嬉しいです。
最後まで読んでくださった方、ありがとうございました。
Comments