从字符串中解析目录

时间:2013-06-21 13:00:28

标签: c# regex vb.net expression

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

我正在使用VB.Net

示例字符串:

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

模式:

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

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

希望我有道理。

2 个答案:

答案 0 :(得分:0)

“[A-Z] {1} :((?![A-Z] {1}:)。)*”,它应该在下一个驱动器号和冒号之前停止?

那“?!”是一个“负面的观察”或“零宽度负向前瞻”,根据Regular expression to match a line that doesn't contain a word?是解决正则表达式中缺乏反向匹配的方法。

答案 1 :(得分:0)

不要过于挑剔,但大多数文件系统都禁止使用少量字符(例如&lt;&gt; / \:?“),因此文件路径的正确模式更像[A-Z]:\\((?![A-Z]{1}:)[^<>/:?"])*。< / p>

另一个重点是如何解析输入,例如“hello path is c:\ folder \ file.extension这不是路径的一部分:P”?当您开始尝试解析而不指定允许的输入范围或解析器接受的语法时,这是您经常遇到的问题。这个特殊问题看起来很特别,所以我真的不希望你提出语法或定义特定消息的编码方式。但是,下次解决解析问题时,请查看是否可以先定义允许的消息及其含义(语法和语义)。我想你会发现,一旦你定义了允许消息的结构,解析几乎是微不足道的。