人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Pythonの正規表現に関する質問です。

ある教科書で、「教師は教師」みたいに同じ単語が助詞を挟んで繰り返される表現を、正規表現でみつけてこいという課題がありました。

それで、試しにですが、

test = '教師は教師、生徒も生徒、女の子は女の子、俺は天才'

という文字列を用意して、

re.findall(r'(.+).\1', test)

と書いてみると、

>>> test = '教師は教師、生徒も生徒、女の子は女の子、俺は天才'
>>> re.findall(r'(.+).\1', test)
['教師', '生徒', '女の子']

という実行結果になりました。
後方参照だと()の部分しか抜き出されないようで、これを「教師は教師」の形で出力するのはどうすればいいでしょうか?

●質問者: midnightseminar
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

re.finditer()を使って、以下のようにしたら一応それっぽいものができました。

>>> test = '教師は教師、生徒も生徒、女の子は女の子、俺は天才'
>>> results_itr = re.finditer(r'(.+).\1', test)
>>> for result in results_itr:
... print(result.group())
...
教師は教師
生徒も生徒
女の子は女の子
>>>


1 ● a-kuma3
●100ポイント

補足に書いてある group と同じことをやっているだけですが、正規表現全体を () でグルーピング。

 re.findall(r'((.+).\2)', test)

語の繰り返しはふたつ目のグルーピングになるので、正規表現ちゅうの後方参照は \2 になります。


繰り返しをマッチさせるためのグルーピングは、正規表現の範囲ではどうしても残るので、それを取り除くにはリストをいじります。

 map(lambda a:a[0], re.findall(r'((.+).\2)', test))

midnightseminarさんのコメント
ありがとうございます! ()でくくってグループ化するとfindallでもまとまりで出力させることができるんですね。

2 ● mateaifish
●0ポイント

“Python - 数学 - データを統計量で記述する(統計電卓、平均値、最頻値、分散、標準偏差) | Kamimura's blog”

http://tweetdig.net/hashtag/Python

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ