こんにちは、ゆきねこです。

社内で色々とごたごたがあって更新が滞っていました。

この先更新のペースは落ちそうですが、なんとか更新していきたいと思います。

 

さて、ローマ字と日本語が混じった文字列から何文字切り出したいってことありますよね。

以前に半角を1byte、全角を2byteとして計算して決まった範囲のbyte数で文字を切り出したいことがあったので、その方法を買いていきます。

色々とライブラリ探してみたんですけど、欲しいのが見当たらなかったのでベタ書きすることになりました。

いいライブラリがあったら教えてください。

さて、コードは以下になります。

import unicodedata

text="sampleテキストです"
strlen=40
CHARACTER_TYPE=["H","Na"]
text_trimmed = text.strip().replace('\n','').replace(' ','')
# 文字数チェック
if len(text_trimmed) <= 0:
  return text_trimmed

purpose_str = ""
byte_cnt = 0
# 一字づつ取り出してチェックします
for character in text_trimmed:
  if unicodedata.east_asian_width(character) in CHARACTER_TYPE:
    byte_cnt += 1
  else:
    byte_cnt += 2
  if byte_cnt > strlen:
    break
  purpose_str += character
print(purpose_str)

簡単に説明すると文字列をfor文で回して半角か全角かチェックしてカウントしていくというシンプルな方法です。

unicodedataのライブラリを使って半角か全角かチェックしてbyte数の計算をしています。

どのように分類されるかはwikipediaがわかりやすいです。

以上です。

カテゴリー: その他もろもろ

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。