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

Pythonにおける文字列処理の質問です。

半角全角が混ざった文字があった時に、
半角文字列であればそのまま、
全角文字が混じっていれば、NULLに置換して戻す処理を行いたいと思うのですが、
一番簡単な方法を教えて下さい。
関数にして紹介いただければうれしいです。

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

▽最新の回答へ

1 ● うぃんど
●100ポイント

標準装備のunicodedataを使ってみました。
Noneだと何も返さないので空文字列を返すようにしてます。

# -*- coding: utf-8 -*-
import unicodedata
def zenkaku(s):
 for s1 in s:
 if unicodedata.east_asian_width(s1) != 'Na':
 s = ''
 break
 return s

s = u'aあa'
print zenkaku(s)
s = u'aba'
print zenkaku(s)

うぃんどさんのコメント
正規表現でせめてくる回答もきそうな予感がするのでオマケ。 正規表現で総当り。 http://winter-tail.sakura.ne.jp/pukiwiki/index.php?Python%A4%A2%A4%EC%A4%B3%A4%EC%2F%C0%B5%B5%AC%C9%BD%B8%BD%A5%D1%A5%BF%A1%BC%A5%F3 正規表現で全角の文字コード範囲で探る。 http://programmer-toy-box.sblo.jp/article/18461430.html マルチバイト対応だけであればord関数のほうが楽? やっぱり応用力でeast_asian_widthか…ちょっと悩む。 http://www.programming-magic.com/20081024005708/

2 ● mjy
●100ポイント ベストアンサー

http://docs.python.jp/2/library/unicodedata.html?highlight=east_asian_width#unicodedata.east_asian_width
http://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6%96%87%E5%AD%97%E5%B9%85

#! /usr/bin/python2
#coding: utf-8

import unicodedata

def is_halfwidth(unicode_char):
 w = unicodedata.east_asian_width(unicode_char)
 if w=='Na' or w=='N' or w=='H':
 return True
 else:
 return False


def del_fullwidth(unicode_string):
 result = []
 for s in unicode_string:
 if is_halfwidth(s):
 result.append(s)
 #本当に削除でなく、Null文字にしたいならば以下を有効に
 #else:
 # result.append('\0')
 return u''.join(result)


if __name__ == '__main__':
 print(del_fullwidth(u'あいう-abc-アイウ-123'))
関連質問

●質問をもっと探す●



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