プロが教える店舗&オフィスのセキュリティ対策術

Pythonのre.split()の正規表現を使って、
text = 'you say goodbye and i say hello.'
を単語単位に
['you', 'say', 'goodbye', 'and', 'i', 'say', 'hello', '.']
のように分割したいのですが、
どの様に記述すれば良いのでしょうか?
分かる方、ご教示下さい。

質問者からの補足コメント

  • 最後のhelloと.(ピリオド)の間には、ブランクはありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/10/23 14:09
  • テキスト(text)は触らないで、
    re.split(正規表現, text)
    で所望の結果を得る「正規表現」の書き方を知りたいのです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/10/23 16:41
  • ひとつ教えてください。
    r (raw string) の
    re.split(r'\b', text)とre.split('\b', text)ではどんな違いがあるのでしょうか?
    ものの本には、rをつけるとバックスラッシュ文字そのものとして扱われと書いてあるようですが?

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/10/25 19:12

A 回答 (5件)

re.findall(r'\w+|[^\w\s]+',text)


でしょうか。数字はどうするんだとか記号の連続があったらどうするかとか不明なので、あくまで一例ですが。

どうしてもsplitでやりたければ、re.split(r'\b|\s+') したあとで空の要素を削除する。
[x for x in re.split(r'\b|\s+',text) if x]

> re.split(正規表現, text)で所望の結果を得る「正規表現」の書き方を知りたいのです。
純粋に正規表現の勉強が目的ならともかく、テキストの分解が目的ならこういう考え方は止めた方が良いです。
×「超複雑な正規表現一発で処理する」・・・読解困難・メンテ不可
○「シンプルな正規表現とプログラムロジックで処理する」・・・読解容易・メンテ容易

(純粋に正規表現の勉強が目的なら他人に質問するはずがないので、勉強目的でないと判断しました)
この回答への補足あり
    • good
    • 1

> rをつけるとバックスラッシュ文字そのものとして扱われ


その通りです。r"\b"は、「\」と「b」の2文字で、正規表現の場合は「英数字とそれ以外の間の隙間」にマッチするという文字列です。
rのない"\b"は、「バックスペース」の1文字です。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/10/26 07:13

なければ入れればいいでしょ


text = 'you say goodbye and i say hello.'
text_mod = re.sub('\.' , ' .' , text)
pattern = r'\s+'
result = re.split(pattern, text_mod)
この回答への補足あり
    • good
    • 0

\b\s*

    • good
    • 0

text = r'you say goodbye and i say hello .'


pattern='\s+'
result=re.split(pattern,text)

\はバックスラッシュ
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A