6

次のような任意の文字列を持つ

hello hello hello I am I am I am your string string string string of strings

space(EDIT) で区切られた繰り返しの部分文字列をどうにかして見つけることはできますか? この場合、「hello」、「I am」、および「string」になります。

私はこれについてしばらく疑問に思っていましたが、まだ本当の解決策を見つけることができません。このトピックに関するいくつかの記事を読み、接尾辞ツリーにたどり着きましたが、繰り返し数が 2 を超える場合など、すべての繰り返しを見つける必要がありますが、これは役に立ちますか?

もしそうなら、接尾辞ツリーを処理してそれらに対して操作を実行できるpython用のライブラリはありますか?

編集:申し訳ありませんが、私は十分に明確ではありませんでした。明確にするために、繰り返しの部分文字列を探しています。これは、文字列内のシーケンスを意味します。たとえば、正規表現に関しては、+ または {} ワイルドカードで置き換えることができます。したがって、リストされた文字列から正規表現を作成する必要がある場合は、そうします

(hello ){3}(I am ){3}your (string ){4}of strings 
4

1 に答える 1

3

それぞれがスペースで区切られた、2 回以上繰り返される 2 つ以上の文字を検索するには、次を使用します。

(.{2,}?)(?:\s+\1)+

テスト文字列を使用した実際の例を次に示します: http://bit.ly/17cKX62

編集: ? を追加して、キャプチャ グループの量指定子を消極的にしました。可能な限り短い一致に一致する (つまり、「string string」ではなく「string」に一致するようになりました)

編集 2: よりクリーンな結果のために必要なスペース区切り文字を追加しました

于 2013-09-01T06:34:21.463 に答える