質問

つまり、単語のリストを取得し、少なくともすべての単語と一致するものから単純な正規表現を構築したい(ただし、それ以上)。

そのためのアルゴリズムが欲しいです。そのアルゴリズムのIE入力は単語のリストであり、出力は正規表現です。明らかに、いくつかの制限があります。どちらかのように、正規表現は、無限の量の単語と一致する必要がある場合、常により多くの単語と一致し、私はそれに有限数の単語のみを与えます。または、入力のさらにコンパクトな表現が必要です。または、入力と追加の単語のリストとして正規表現を与えることも考えており、それらすべてを一緒に(そしておそらくそれ以上)一致させる正規表現を取得したいと考えています。いずれにせよ、可能な限り単純な正規表現を構築しようとする必要があります。

それを行うことができるどのようなテクニックが利用できますか?


私はかなり誤解されていました。私は正規表現の背後にある一般原則を知っています。私はそれが何であるかを知っています。そして、ほとんどの場合、私は手である言語に正規表現を簡単に思いつくことができます。しかし、私はそれを行うアルゴリズムを探しています。


再び少し違う定式化:

lを正常な言語とします。 M_NをN要素を持つLの有限サブセットとします。 m_nをm_(n+1)のサブセットとします。

有限の単語セットを取得し、正規表現を出力するアルゴリズムLREが必要です。そして、私はプロパティを持ちたいです:

lim_n-> infinity | diff(lre(m_n)、l)| = 0

役に立ちましたか?

解決

この問題は過去10年間に見られました。 DFA学習をGoogleで検索し、いくつかの論文をダウンロードして、最先端の感覚を得ることができます。

DFAが正規表現を生成すると、些細なことです。問題を回避するために、 @frustratedWithDesignに問題を回避するために、DFAを生成することなどのいくつかの条件がノードの量で導入されます。機械学習の観点から、これは最も単純な仮説の正規化条件を持つことに似ています。

他のヒント

一般原則を学ぶには、このウェブサイトを参照してください。 http://www. Regual-Expressions.info/

あなたが持っているのは、 dog, cat, cow, mouse, 、 最も簡単です これらのいずれかを一致させることは次のとおりです。 dog|cat|cow|mouse, 、しかし、それも一致することに注意してください doggone, scatological, 、など...一致する場合と一致しない場合があります DOGGONE, COWPATTY, 、など...ケースに敏感なマッチングを行っているかどうかに応じて。あなたの問題に関するより多くの詳細が与えられた場合、より良いパターンを与えることができます。

また、正規表現テストツールを入手することも良い考えです。私はExpressoが好きです、それは.NETパターンに適しています。正規表現のカパビルティはプラットフォーム間で異なる場合があるため、ツールがプラットフォームをサポートしていることを確認してください。

使用する このサイト 基本を学び、使用します ルムラ ライブテスト用。

一致したい明確な単語のリストがある場合、正規表現が最もよくあるものに一致しているようには聞こえません。

として FrustratedWithFormsDesigner 指摘されている - 最悪の場合、あなたの正規表現はリスト内のアイテムにマッピングされるでしょう。一般的なプレフィックスを見つけることができます。また、Regex構造を自動化する場合、なぜ正規表現を悩ませますか?ユースケースとは何ですか?

しかし、あなたのリストが些細なサイズを超えているなら、おそらくそれをループする方が良いでしょう。

http://www. Regual-Expressions.info 正規表現のための素晴らしいサイトです。

複雑な正規表現を構築するとき、私は通常Expressoを使用します。これは、通常の表現を構築するのに役立つ無料のアプリです。それはそれらをツリービューに分解し、すべての部品が何をしているのかを簡単に見ることができます。 http://www.ultrapico.com/expresso.htm .NET言語で作業するように作られていますが、さまざまな言語で利用できるこのようなツールがたくさんあります。

正規表現を構築するために、私は通常、許容できる値から始めて、regexの構文で文字の交換を開始します。

たとえば、私がURLを一致させようとしていた場合、私は始めます

http://www.mydomain.com

それから私は逃げる必要があるものすべてを逃れます

http://www\.mydomain\.com

その後、文字の交換を開始します

http://www\.\w+\.\w+\.\w+

明らかに、この表現にはもう少し作業が必要ですが、あなたはアイデアを得る必要があります

これがPerl Regexのサイトです:

http://perldoc.perl.org/perlre.html
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top