- 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
結果は以下です。素晴らしいですね。
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
- Name
- Shou Arisaka / 有坂 翔
- 情報技術者 / Z世代プログラマー / 米大学院にてデータサイエンスを学ぶ
- ITプロフェッショナルとして活動しています。React.js等のモダンなウェブ制作・アプリ開発を得意としており、Java・Python・Rust等のプログラミング言語を用いたソフトウェア開発全般を行っています。
- Github 🐙StackOverflow 🔥Qiita 📝
- TechFreeTools 🔧About.me 👤