re.search を使って文字列中に、日本語などが含まれているかを調べようとしています。
検索する文字の指定として「'あ'」や「'[あ-ん]'」であれば考えている通りに動作しました。
下記コードの(1)〜(4)の部分です。
python
1#!/usr/bin/env python3 2# -*- coding:utf-8 -*- 3import re 4#(1) 5str = 'abあc' 6check = re.search('あ', str) 7print(str,'\t',check) 8#(2) 9str = 'abc' 10check = re.search('あ', str) 11print(str,'\t',check) 12#(3) 13str = 'abあc' 14check = re.search('[あ-ん]', str) 15print(str,'\t',check) 16#(4) 17str = 'abc' 18check = re.search('[あ-ん]', str) 19print(str,'\t',check) 20 21#(5) 22str = 'abc' 23check = re.search('[\xe38180-\xe9beaf]', str) 24print(str,'\t',check) 25#(6) 26str = 'abあc' 27check = re.search('[\xe38180-\xe9beaf]', str) 28print(str,'\t',check)
記号も含めたい部分があるので、上記(5)(6)のように、文字コードで指定しました。
「\xe38180-\xe9beaf」と範囲指定しました。
すると、「'abあc'」にも「'abc'」にも「\xe38180-\xe9beaf」が含まれているとなってしまいました。
「'abあc'」も「'abc'」に対しても、「match='a'」となったのは、どのように考えればいいのでしょうか。
文字コードで検索する文字を指定するにはどのように指定すれば良いのでしょうか。
python
1~ $ python3 test.py 2abあc <_sre.SRE_Match object; span=(2, 3), match='あ'> (1) 3abc None (2) 4abあc <_sre.SRE_Match object; span=(2, 3), match='あ'> (3) 5abc None (4) 6abc <_sre.SRE_Match object; span=(0, 1), match='a'> (5) 7abあc <_sre.SRE_Match object; span=(0, 1), match='a'> (6)
文字コードで指定する部分を下記のように指定すると
python
1str = 'abあc' 2check = re.search('[\xe38182]', str) 3print(str,'\t',check)
結果が「None」となりました。“あ”は「e38182」だから、このように指定したのですが、考えている通りに動作しませんでした。
abあc None
回答ありがとうございます
「'[\xe38180-\xe9beaf]'」の部分を下記のように変更しました。
結果は変わりませんでした。
> 4ケタ指定の\u を
とのことですが、4桁ではまだ足りないかと思うのですが...
str = 'abc'
check = re.search('[\ue38180-\ue9beaf]', str)
print(str,'\t',check)
「4ケタ指定の\uを使ってください。」とはこの書き方ではないのでしょうか
であれば、と \xを2文字ごとにつけると
str = 'abc'
check = re.search('[\xe3\x81\x80-\xe9\xbe\xaf]', str)
print(str,'\t',check)
str = 'abあc'
check = re.search('[\xe3\x81\x80-\xe9\xbe\xaf]', str)
print(str,'\t',check)
こんどは、ずべてNoneになってしまいました。
「あ」は Unicode では U+3042, 「ん」は U+3093 になります。なので、
check = re.search(r'[\u3042-\u3093]', str)
としてみて下さい。
ありがとうございました
条件を「check = re.search(r'[\u3042-\u3093]', str)」としたところ、下記の結果になりました
abc None
abあc <_sre.SRE_Match object; span=(2, 3), match='あ'>
これで解決はしましたが、
print('あ'.encode('utf-8')) とすると
V V V
b'\xe3\x81\x82' となります
また、echoコマンドでも“あ”は“e38182”なので
~ $ echo 'あい'|xxd
00000000: e381 82e3 8184 0a .......
「U+3042」ではなくutf-8の「e38182」で指定したいのですが、
本質問の「re.search を使って文字列中に、日本語などが含まれているか」とは
別件になると思うので、もう少し調べてから改めて、質問させていただきます。

回答1件
あなたの回答
tips
プレビュー