JP Coders

Published on

正規表現からテキストデータを生成する方法

正規表現からテキストデータを生成する方法についてです。

正規表現からテキストデータを生成したいシーンと言うと、サンプルデータ、フェイクデータがほしいとか、または単純に、ノートテイキングなどにおいて、すべてのテキストの候補を書くのが面倒だったり正規表現で書いておいたほうがすっきりするからという理由だったりするかもしれません。

以下はまさにそのことについての質問です。

java - Using Regex to generate Strings rather than match them - Stack Overflow

上記にも出てきているGenerexを含めて、軽く探してみた所、もう一つRubyのライブラリが見つかりました。

mifmif/Generex: A Java library for generating String from a regular expression. tom-lord/regexp-examples: Generate strings that match a given regular expression

こちらのほうが新しく、Rubyということでとっつきやすさもあります。Javaのほうはかなり古いですが、機能的にはあまり変わらなそうです。しかしRubyは「正規表現に強い言語」としても有名ですので、Rubyのほうが期待値は高そうですね。

ということで使ってみました。

インストールは以下。

cat >> Gemfile
gem 'regexp-examples'

bundle install

ところで、最近Googleでバルク検索するツールを作りました。何かを検索するときは英語なんですが、僕もネイティブじゃありませんので、より適切な単語があったりするわけです。例えば make より create のほうが適切な場合があったり、その逆があったり、するわけですね。そういうときには how to (make|create) something って書いておいて、regexp-examplesにてテキストデータを生成してやって、それをGoogle検索してやれるわけですね。

how to make something
how to create something

プログラミング熱をこじらせて遂には「プログラミング言語で小説を書きたい」なんて思ってしまった僕。効率的なGooglingをするべく、以下のような正規表現をregexp-examplesで試してみました。

require "regexp-examples"

# puts /a*/.examples #=> ['', 'a', 'aa']

puts /(writing|construct|make) (novel )?story (by|with) (programming|predicate logic)/.examples
https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_8b474c7c-716e-4b06-abfd-557aad05a6ba.png

結果は以下です。素晴らしいですね。

writing story by programming
writing story by predicate logic
writing story with programming
writing story with predicate logic
writing novel story by programming
writing novel story by predicate logic
writing novel story with programming
writing novel story with predicate logic
construct story by programming
construct story by predicate logic
construct story with programming
construct story with predicate logic
construct novel story by programming
construct novel story by predicate logic
construct novel story with programming
construct novel story with predicate logic
make story by programming
make story by predicate logic
...

蛇足ですが、小説をプログラミングするのは人類にはまだ早かったようです。残念ですね。

Authors
  • avatar
  • Name
  • 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ

  • ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。

お手伝いできますか? 🤝

他の方法でのご連絡をご希望ですか?
web制作ご依頼受付中

本記事で掲載している情報やコードは執筆時点のものであり、動作を保証するものではありません。 自己責任のもと、プログラムの実行や情報の利用にあたってはご注意ください。


本記事には提携する企業の広告が含まれる場合があります。