0

首先,我花了三个小时试图解决这个问题。另外请不要建议不使用正则表达式。我很欣赏其他评论,并且可以轻松使用其他方法,但我正在尽可能多地练习正则表达式。

我正在使用 VB.Net

示例字符串:

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

图案:

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

工作正常。如果目录名称包含空格怎么办?我试图匹配所有以 1 个大写字母开头的字符串,然后是一个冒号,然后是其他任何内容。这需要匹配到一个空格、1 个大写字母和一个冒号。但随后再次匹配相同的序列。

希望我说得有道理。

4

2 回答 2

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 回答
0

“[AZ]{1}:((?![AZ]{1}:).)*”怎么样,它应该在下一个驱动器号和冒号之前停止?

那 ”?!” 是根据正则表达式匹配不包含单词的行的“负环视”或“零宽度负环视”?是解决正则表达式中缺乏反向匹配的方法。

于 2013-06-21T13:18:58.587 回答