RegEx表示2个空白字符之间的表达式

时间:2015-01-21 22:30:24

标签: regex

我有一个嵌入式目标的文件目录列表,如下所示:

Directory of D:\
D                   0     19-Jan-15 16:12:16     FILE1
D                   0     19-Jan-15 16:09:31     FILE2
D                   0     21-Jan-15 14:10:33     FILE3
94951/218985 MB unused/total

我希望只获取文件名。 c#中的字符串将如下所示:

\r\nDirectory of D:\\\r\nD     \t         0\t19-Jan-15 16:12:16\tFILE1\r\nD     \t         0\t19-Jan-15 16:09:31\tFILE2\r\nD     \t         0\t21-Jan-15 14:04:15\tFILE3\r\n94969/218985 MB unused/total\r\n

我注意到文件名总是包含在\t\r\n之间,所以我认为接近它的最简单方法是使用\t(.*?)\r\n但是这将获得整行。将此与正则表达式相结合以省略行中的前2 \t的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

\t([^\t]*)\r\n

即。在\t\r\n之间找到所有字符非标签字符,从而为每行提供文件名。

RegEx Demo

答案 1 :(得分:3)

由于文件名不能包含标签字符,因此您可以将.中的\t(.*?)\r\n替换为[^\t]。此外,您可以使用外观与开头的\t和最后的\r不匹配,消除不必要的捕获组,并将*?更改为+:< / p>

(?<=\t)[^\t]+(?=\r)

此正则表达式将匹配不包含任何制表符的字符序列,只要序列位于制表符(\t)和回车符(\r)之间。

您可以找到在线解释和演示here。请注意,要使用regex101,我必须将\r更改为\n;您很可能仍需要正则表达式中的\r

答案 2 :(得分:2)

您可以使用捕获组或类似的方式执行此操作:

 (?<=\t)[^\t]+(?=[\r\n])