0

まず、これを解決するために3時間費やしました。また、正規表現を使用しないことを提案しないでください。他のコメントに感謝し、他の方法を簡単に使用できますが、可能な限り正規表現を実践しています。

私はVB.Netを使用しています

文字列の例:

"Hello world this is a string C:\Example\Test E:\AnotherExample"

パターン:

"[A-Z]{1}:.+?[^ ]*"

正常に動作します。ディレクトリ名に空白が含まれているとどうなりますか? 大文字 1 文字で始まり、その後にコロンが続き、それ以外のすべての文字列と一致するようにしました。これは、空白、1 つの大文字、およびコロンまで一致させる必要があります。しかし、同じシーケンスをもう一度一致させます。

私が理にかなっていることを願っています。

4

2 に答える 2

0

"[AZ]{1}:((?![AZ]{1}:).)*" は、次のドライブ文字とコロンの前で停止する必要がありますか?

それか "?!" 単語を含まない行に一致する正規表現によると、「否定的なルックアラウンド」または「ゼロ幅の否定的なルックアヘッド」ですか? 正規表現の逆一致の欠如を回避する方法です。

于 2013-06-21T13:18:58.587 に答える
0

うるさいわけではありませんが、ほとんどのファイルシステムでは少数の文字 (<>/\:?" など) が許可されていないため、ファイル パスの正しいパターンは[A-Z]:\\((?![A-Z]{1}:)[^<>/:?"])*.

提起された他の重要なポイントは、「hello path is c:\folder\file.extension this is not part of the path:P」のような入力を解析する方法です。これは、許容される入力の範囲やパーサーが受け入れる文法を指定せずに解析を開始したときによく遭遇する問題です。この特定の問題は非常にその場しのぎのように思われるため、文法を思いついたり、特定のメッセージがどのようにエンコードされるかを定義したりすることは期待していません。しかし、次に構文解析の問題に取り組むときは、許可されるメッセージとその意味 (構文とセマンティクス) を最初に定義できるかどうかを確認してください。許可されたメッセージの構造を定義すると、構文解析はほとんど簡単になることがわかると思います。

于 2013-06-23T19:36:01.590 に答える