0

だから、私は正規表現にかなり慣れていません。そうは言っても、私は助けを求めています。私はこの正規表現を使ってやりたいことをしていますが、これは私の現在の理解でできる限り簡単です。

(\w+\s*?\w+\s*?\-*?/*?\w+)\s*?(\(\w+\))

これが一致する必要があるのは、次の文字列の構成です。

word
word word
word-word
word/word
word word/word
word word/LL
word word (word)
word-word word/word

悪用しているように感じ*?ますが、それを使用した例を見たところ、必要なことをしているように見えました。私はまた*、同じことをするのを見てきましたか?それともただ??とにかくあります。前もって感謝します!

また、この正規表現は実際には他のグループよりもかなり長いため、グループ化が存在します。覚えておいてください。他のグループと一緒に作業するには、グループが必要です (合計 4 つ)。

編集:申し訳ありません。私は実際に、Eclipse IDEの組み込みの検索/置換(正規表現を使用)を使用して、pdfからコピーペーストされたテキストをPython構文に変換しようとしています。そのため、何を使用していたかは特定しませんでした。私はそれがただの正規表現だと思っていました。

また、現在の正規表現は完全に機能します。ここで私が求めているのは、シンプルさに関するレッスンです (そして、*より?よく説明されています)。現在の正規表現は長くて醜いと感じました。

4

2 に答える 2

2

?他の RegEx 量指定子がそれらを消極的にした後。RegEx の残りの部分が一致しなかった場合にのみ入力と一致することを意味します。

?それが適用される文字のセットが次のセットと共通の文字を持たない場合、嫌悪感は不要です。たとえば、次のようになります。

[0-9]*?[A-Z]

[A-Z]以前のすべての が一致しない限り、一致する方法はありません[0-9]。では、なぜ[0-9]*躊躇するのでしょうか。逆に、 を削除して貪欲にし?ます。

[0-9]*[A-Z]

?が虐待される 2 番目のケースがあります。たとえば、特定のテキストに大文字の単語の後にコロンが続くなどの内容が含まれていることがわかっているとします。コロンが他に出現する可能性はありません。

.*?:[A-Z]+

仕事をするでしょう。しかし、

[^:]*:[A-Z]+

コロンが常に一致させたいものを開始するという事実をよりよく表しています。この場合、(キャラクターの共通性の) 最初の条件を「作成」しました。IOW.*マッチングも:sを必要としなかったが、 [^:]*.

reluctant 演算子を使用するのは気が進まないのは、パターンを明確にするのではなくパターンを曖昧にする傾向があるためです。また、パフォーマンスへの影響もあります。これは、バックトラックのレベルが大幅に増加するという事実のおかげです (理由もなく)。

これらの原則を適用すると、

(\w+\s*\w+\s*\-*/*\w+)\s*(\(\w+\))

より良いオプションのようです。また、ある時点で使用します\-*/*。(正の) 例と同じくらい多くの反例がなければ、本当に必要なものを知ることは困難です (これは、正規表現を開発およびテストする際に非常に重要です! -) /。あなたが探しているのは、1つ-または1つ/または1つのスペースであるというのが私の印象です。 [ \-/]はるかにうまくいくでしょう。または\s*[\-/]?\s*、複数のスペースを受け入れたい場合は、[\-/]

(\w+\s*\w+\s*[\-/]?\s*\w+)\s*(\(\w+\))

詳細については、 正規表現に関するJava ドキュメントを参照してください。

于 2013-08-18T00:15:21.723 に答える
0

(.*) が必要なものの最も単純な形式であると指摘した pswg は正しかった。私の正規表現の他の 3 つのグループ化は、これが機能するのに十分具体的です。ありがとうございます

PSは、なぜ私が反対票を投じられたのかまだわかりません

于 2013-08-18T02:22:30.927 に答える