我有一个嵌入式目标的文件目录列表,如下所示:
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
的最佳方法是什么?
答案 0 :(得分:4)
答案 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])