メモ書き:文字列のなんやかんや(re)

以前にこんな感じのやつ書こうと思ったのに消した気がするので書き直しましゅ

正規表現についてはGoogle先生に聞いてください、できたら後でまとめておいてください。それから冷たい水をください、できたら愛してください。
それよりもreについてもう少しまとめてください。この記事は完成してません。使うときに増やしておいてね。マッチオブジェクトについて詳しく書いておいて下さいどうせ私は忘れるので。

match

文字列の先頭がマッチするかチェックする。マッチするならマッチオブジェクトが返ってくる。

import re
s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.match(r"「.+?」", s)
print(c)
<_sre.SRE_Match object; span=(0, 5), match='「死の雨」'>

先頭だけなので先頭にないものだとこうなる。

import re
import re
s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.match(r"リリィ", s)
print(c)
None

先頭じゃなくてもOK。ただし、1つしか検索できない。

finditer

「いやいや、1つだけじゃなくて全部知りたいんだわ。」って時に使うやつ

findall

こっちの方が雑に手軽に使えるのでこっちを使っちゃってることが多い。いいのか悪いのかは分からない。マッチオブジェクトは返ってこない。

 s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.findall(r"「.+?」", s)
print(c)
['「死の雨」', '「果ての国」']

sub

置換。削除にも使える。

s = "「死の雨」によって滅びた王国「果ての国」を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。"
c = re.sub(r"「.+?」","", s)
print(c)
によって滅びた王国を舞台に、少女リリィと不死の騎士達の物語が始まります。悲劇的で美しい世界を探索しながら、一瞬の気の緩みが命取りになるような強敵との戦闘を繰り広げる横スクロールアクションRPGです。仲間たちと共に世界の真相へ辿り着いて下さい。

countを使うことで最大置換回数を指定できる。




後で書いておいてくださいシリーズ

  • マッチオブジェクトについて詳しく書いておいて下さい
  • re.split("@.+? ",text)[-1]

これなんだっけ?多分リスト化だったような気もする。