39739


下記のようなPerlのコードと同じことをPythonでやりたくて調べています。

[code]

    use utf8;
    use feature 'unicode_strings';
    use open ':encoding(utf8)';         # I/O default encoding is UTF-8
    use open ':std';                    # stdio encoding = utf8
    use Encode qw(encode_utf8 decode);
    
    use strict;
    
    my $regExp = qr/[\p{Han}\p{Katakana}a-zA-Z0-9０-９%][\p{Han}\p{Katakana}a-zA-Z0-9０-９%・ー]*/;
    my $text = "三人行えば、必ずわが師あり";
    my @matchedList = ();
    
    for ($text) {
        s/($regExp)/ do{ push @matchedList,$1; ""; }; /ge;
    }
    
    print join( ",",@matchedList);
    
[/code]

上記を実行すると、"三人行,必,師"という漢字だけを抽出した文字列を得ることができます。  
これをPythonでもやりたいのですが、下記のようなコードを書いてみてもうまくいかず困っています。

[code]

    # coding: utf-8
    import re
    
    regExp = r'[一-龥ァ-ンa-zA-Z0-9０-９%][一-龥ァ-ンa-zA-Z0-9０-９%・ー]*'
    text = '三人行えば、必ずわが師あり'
    
    if re.match(regExp, text):
        matched = re.findall(regExp, text)
        print ','.join(matched)
    
[/code]

これでは漢字のみを抽出することができず、一文すべてを抽出してしまい結果が異なります。  
re.searchなども試してみましたが同様でした。  
PythonでもPerlで書いたような抽出結果を再現することはできるのでしょうか。  
お知恵をお貸し下さい。  
よろしくお願いいたします。


CC BY-SA 3.0
2017-11-21T00:14:17.113
39719
2017-11-21T11:59:46.037
14346
question
python 正規表現 perl
Perlの正規表現による文字列抽出をPythonでやりたい


コメント頂いた通りunicodeにすることで解決できました。  
ありがとうございました。

[code]

    # coding: utf-8
    import re
    
    regExp = ur'[一-龥ァ-ンa-zA-Z0-9０-９%][一-龥ァ-ンa-zA-Z0-9０-９%・ー]*'
    text = u'三人行えば、必ずわが師あり'
    
    if re.match(regExp, text):
        matched = re.findall(regExp, text)
        print ','.join(matched).encode('utf-8')
    
[/code]


CC BY-SA 3.0
2017-11-21T11:59:46.037
39739
2017-11-21T11:59:46.037
14346
39719
answer