🖥

#python の #正規表現 で テキストを Twitter のハッシュタグスタイル にする例

2019/04/19に公開
  • 単語境界 \b でマッチさせて replace する

単語全て (ざっくり)

>>> re.sub(r'\b([A-Za-z][A-Za-z0-9]+)\b', "#\\1", "A whole new-world under_the_sea")
'A #whole #new-#world under_the_sea'

指定の単語

perlpythonruby という文字列は置換されていないのが分かる


>>> re.sub(r'\b(ruby|perl|python)\b', "#\\1", "Do you like python or ruby? mixed perlpythonruby languate does not exist?")
'Do you like #python or #ruby? mixed perlpythonruby languate does not exist?'

大文字小文字を気にしないパターン

大文字の Ruby も置換されているのが分かる

>>> pattern = re.compile(r'\b(ruby|perl|python)\b', re.IGNORECASE)
>>> re.sub(pattern, "#\\1", "Do you like python or Ruby? mixed perlpythonruby languate does not exist?")
'Do you like #python or #Ruby? mixed perlpythonruby languate does not exist?'

元から存在するハッシュタグを無視する例

否定の look back を使う ?<!#

>>> re.sub(r'\b(?<!#)(ruby|perl|python)\b', "#\\1", "Do you like #python or ruby? mixed perlpythonruby languate does not exist?")
'Do you like #python or #ruby? mixed perlpythonruby languate does not exist?'

全部込み

>>> pattern = re.compile(r'\b(?<!#)(ruby|perl|python)\b', re.IGNORECASE)
>>> re.sub(pattern, "#\\1", "Do you like #python or ruby or Perl? mixed perlpythonruby languate does not exist?")
'Do you like #python or #ruby or #Perl? mixed perlpythonruby languate does not exist?'

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1331

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-04-19

Discussion