正規表現を学習中に表題の表な問題が生じ、検証するために以下のようなコードを書いてみました。
import re pattern1 = '(、|。)' pattern2 = '、|。' pattern3 = '[、。]' pattern4 = '(?:、|。)' saying = '前へ、前をむく。そして、歩き出す' print(re.split(pattern1, saying)) # >>>['前へ', '、', '前をむく', '。', 'そして', '、', '歩き出す'] print(re.split(pattern2, saying)) # >>>['前へ', '前をむく', 'そして', '歩き出す'] print(re.split(pattern3, saying)) # >>>['前へ', '前をむく', 'そして', '歩き出す'] print(re.split(pattern4, saying)) # >>>['前へ', '前をむく', 'そして', '歩き出す']
句読点で文字列を区切るというコードです。
re.splitはpartternに記載されている文字でsayingを区切りリストで表示するという解釈です。
pattern1なのですが、なぜか区切ろうとしている文字(、。)もリストに組み込んでしまっています。
pattern2,3,4はいずれも思った通りに区切っています。
pattern4はキャプチャを無効化するとネットに書いてあったので試しにやってみたら成功しました。
()というのは自分の中では
①グループ化し、メタ文字で操作できる 例(st)+$とするとstのまとまりとして操作できる
②キャプチャして、操作できる 例m.group([1])とするとキャプチャのうちの一番先頭の文字が表示される
という解釈です。
上記のpattern1ではキャプチャが何かしていると思うのですが、理由が結局わかりません。
pattern1で区切り文字もリストに追加されている件について、ご教授いただけるととても助かります。
よろしくお願いします。
ちなみに、(?:)の?:はキャプチャを無効化するとあったのですが、そもそも?:についての情報が調べてもあまり出てこないので、?:はキャプチャを無効化すると覚えてしまうだけで大丈夫でしょうか?また、キャプチャを無効化するという操作は実際に使い所(利点)があるのかについてご存知であったら、教えていただけると幸いです。
mac 10.14.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/21 14:37