• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:python 正規表現)

Python正規表現でひらがな・カタカナ一文字を除去する方法

このQ&Aのポイント
  • 正規表現を使用して、テキストデータから「ひらがな一文字」「カタカナ一文字」の単語を除去したい。
  • 現在のプログラムでは、行の先頭や末尾にひらがな・カタカナがある場合、正しく除去できない。
  • スペースを入れることなく、正規表現を使って効果的にひらがな・カタカナ一文字を除去する方法を教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.3

\b を回答した者です。日本語は「語」と見なされないようでダメみたいですね。 しょうがないので、  line = re.sub(u'\s[ぁ-ゞァ-ヾ]\s', u' ', line)  line = re.sub(u'\A[ぁ-ゞァ-ヾ]\s', u'', line)  line = re.sub(u'\s[ぁ-ゞァ-ヾ]\Z', u'', line) と行中、行頭、行末と3回に分けて。

qwewqwe
質問者

お礼

再度ありがとうございます!助かります 参考にやってみます

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

せっかくなので、正規表現について勉強しましょう。 正規表現 HOWTO http://docs.python.jp/2/howto/regex.html 7.2. re — 正規表現操作 http://docs.python.jp/2.7/library/re.html \bについては、2つの罠にハマっています。 一つは、上記HOWTOにもあるものです http://docs.python.jp/2/howto/regex.html#more-metacharacters > \b > 単語の境界。(略) > この特別なシーケンスを利用するときには二つの微妙な点を心にとめておく必要があります。 > まずひとつめは Python の文字列リテラルと表現の間の最悪の衝突を引き起すことです。 > Python の文字列リテラルでは \b は ASCII 値8のバックスペース文字です。 > raw string を利用していない場合、Python は \b をバックスペースに変換し、正規表現は期待するものとマッチしなくなります。 もう一つは、reモジュールの説明の方にあります。 > \b > 空文字列とマッチしますが、単語の先頭か末尾の時だけです。 > 単語は英数字あるいは下線文字の並んだものとして定義されています (略) > 英数字であると見なされる文字の正確な集合は、 UNICODE と LOCALE フラグの値に依存することに注意して下さい。 つまり、現状は、ひらがなは「単語の一部ではない」と見做されている状態です。 対策としては ・UNICODEフラグONでcompileしたreのオブジェクトを使う。 コンパイル済みの正規表現オブジェクトの使い方はHOWTOにも書いてあります。 forの外でcompileすると、forの中では、毎回正規表現をコンパイルする必要が無くなり、効率の向上が期待できます。 ・(?u)で、UNICODEフラグを設定する > (?iLmsux) > ( 集合 'i', 'L', 'm', 's', 'u', 'x' から1文字以上) 。 > 文字は、正規表現全体の対応するフラグ (re.I (大文字・小文字を区別しない), re.L (ロケール依存), re.M (MULTILINEモード), re.S (DOTALLモード), re.U (Unicode依存), re.X (冗長) ) を設定します。 あと、\s だと 無理 ぃ お 暮らし ホーミング の「お」にマッチしません。 「お」の前の空白が、「ぃ」の後の空白としてマッチしてしまうため、続きが「お」からになるからです。

qwewqwe
質問者

お礼

ありがとうございました!非常に参考になりました

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.1

行頭の1文字あるいは行末の1文字を削除する正規表現を追加してみては如何でしょうか? line = re.sub(u'^[ぁ-ゞ]\s', u' ', line) line = re.sub(u'\s[ぁ-ゞ]\s', u' ', line) line = re.sub(u'\s[ぁ-ゞ]$', u' ', line)

qwewqwe
質問者

お礼

ありがとうございました!参考にさせていただき勉強してみます

関連するQ&A