控制逃逸太短。如何获得正则表达式?

时间:2014-07-01 19:48:01

标签: c# regex

所以,让我们说我的搜索结果是:

\\my.test.site@SSL\JohnDoe\SusanSmith\courses\PDFs\Science_Math\BIOL\S12014 Syllabi\BIOL-1322-S12014-John-Doe.pdf

每当结果列在文本框中时,我得到的是整个路径,而不仅仅是文件。这是按设计运行的,因为我在枚举目录时无法使用.Select(Path.GetFileName),以免它没有完整的搜索路径。

所以,当显示结果时,我将使用正则表达式在结尾处进行替换,但是当我去Rubular时,它不喜欢我的表达式或测试字符串(无法形象)哪个)。

我基本上想要删除除文件名和扩展名之外的所有内容。

所以我的正则表达式应该是这样的:

\\my.test.site@SSL\JohnDoe\SusanSmith\courses\PDFs\.+\.+\.+\

这样我就可以获得所有文件名和扩展名以便删除。然而,Rubular并不喜欢什么,因为我得到了一个太短的控制逃生"错误。我不想在C#中测试这个,而没有在Rubular中进行验证,因为我大量使用它,并想一想它是否在那里工作它不会在运行时工作。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

请记住要转义\字符以及文字.字符:

\\\\my\.test\.site@SSL\\JohnDoe\\SusanSmith\\courses\\PDFs\\.+\\.+\\.+\\

另请注意,您可能希望通过使用非贪婪量词来避免.+上的过度匹配:

\\\\my\.test\.site@SSL\\JohnDoe\\SusanSmith\\courses\\PDFs\\.+?\\.+?\\.+?\\

或使用字符类:

\\\\my\.test\.site@SSL\\JohnDoe\\SusanSmith\\courses\\PDFs\\[^\\]+\\[^\\]+\\[^\\]+\\

答案 1 :(得分:0)

也许我误解了这个问题,但听起来你的方法过于复杂。

你不能简单地匹配这个:.+\\

然后替换为''(没有)?