下記のようなPerlのコードと同じことをPythonでやりたくて調べています。
Perl
1 use utf8; 2 use feature 'unicode_strings'; 3 use open ':encoding(utf8)'; # I/O default encoding is UTF-8 4 use open ':std'; # stdio encoding = utf8 5 use Encode qw(encode_utf8 decode); 6 7 use strict; 8 9 my $regExp = qr/[\p{Han}\p{Katakana}a-zA-Z0-90-9%][\p{Han}\p{Katakana}a-zA-Z0-90-9%・ー]*/; 10 my $text = "三人行えば、必ずわが師あり"; 11 my @matchedList = (); 12 13 for ($text) { 14 s/($regExp)/ do{ push @matchedList,$1; ""; }; /ge; 15 } 16 17 print join( ",",@matchedList);
上記を実行すると、"三人行,必,師"という漢字だけを抽出した文字列を得ることができます。
これをPythonでもやりたいのですが、下記のようなコードを書いてみてもうまくいかず困っています。
Python
1 # coding: utf-8 2 import re 3 4 regExp = r'[一-龥ァ-ンa-zA-Z0-90-9%][一-龥ァ-ンa-zA-Z0-90-9%・ー]*' 5 text = '三人行えば、必ずわが師あり' 6 7 if re.match(regExp, text): 8 matched = re.findall(regExp, text) 9 print ','.join(matched)
これでは漢字のみを抽出することができず、一文すべてを抽出してしまい結果が異なります。
re.searchなども試してみましたが同様でした。
PythonでもPerlで書いたような抽出結果を再現することはできるのでしょうか。
お知恵をお貸し下さい。
よろしくお願いいたします。
追記:
ご回答頂き無事解決できました。
ありがとうございました。
Python
1# coding: utf-8 2import re 3 4regExp = ur'[一-龥ァ-ンa-zA-Z0-90-9%][一-龥ァ-ンa-zA-Z0-90-9%・ー]*' 5text = u'三人行えば、必ずわが師あり' 6 7if re.match(regExp, text): 8 matched = re.findall(regExp, text) 9 print ','.join(matched).encode('utf-8') 10

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/21 12:03
2017/11/22 04:15
2017/11/22 23:01