依頼された作業の正規表現を作成しようとしていますが、十分に効率的にすることができません。
目的は、以下を可能な限り効率的にすることです。
目標番号 1. 文末 (ドット、3 つのドット、感嘆符など) を使用してすべてのテキストを区切ります。
Objective number 2 文字列 'em' の後に表示されるすべての数字を取得する
これは、考えられる小さな文字列とその正規表現の例です。(本当のものは本当にハッジすることができます)
正規表現: old:
(?:[^.!?:]|...)(?:(?:[^.!?:]|...)*?em (\d+))*
new:
(?:[.!?]|[.][.][.])(?:(?:[^.!?]|[.][.][.])*?\bem\b (\d+))*
文字列に対して機能します(作成したばかりです)
(最初に . を挿入します)
.Foi visto que a batalha em 1939 foi. Claro que a data que digo ser em 1939 é uma farsa. Em 1938 já (insert em 1910) não havia reis.
私が望んでいたのは、バックトラックする必要がないため、バックトラックしない正規表現を作成することです。そのようにすることで、これに必要な処理を節約できると思います.30秒から20秒、さらには10秒に短縮できます! this1 のためだけに、完了するのに 1 秒かかります。
追加:
回答のThnxが失敗しないものになりました。しかし、それでもバックトラックが多すぎます。解決策はありますか?
追加 (削除された質問の 1 つに回答するため):
残念ながら、サンプル データがありません。これを行うように依頼された人は、サンプル データも持っていないと言いますが、これは「昨日まで」行う必要があります。このテキストで可能な限り効率的に機能するものを教えていただければ、それを使用して、必要に応じてこの作業に固有の何かを隠すことができると確信しています. そうでなければ、ここでもう一度尋ねます。