正则表达式匹配除字符之外的所有内容

时间:2014-10-07 20:23:32

标签: regex

我有一个包含以下内容的有效内容:

\帕特里克 - 测试 - file.txt的xSMB2

我希望提取patrick-test-file.txt的文件名

我可以通过使用它来接近,但它继续包括所有内容(包括ascii字符)

[\\\\](.*?)x�SMB2

结果如下:�p�a�t�r�i�c�k�-�t�e�s�t�-�f�i�l�e�.�t�x� t������为捕获组。

如何匹配文件名的字符,可以是任何长度可变的字符,并且可以包含字母数字字符?这是纯粹的正则表达式吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

有时你不能做一个与语言无关的正则表达式来完成某些事情。有时(通常)执行一系列字符串函数会更有效。

我不会亲自接受任何具有硬编码值的解决方案,例如x�SMB2

如果您只想使用正则表达式,可以先选择文件名部分,如下所示:(([-\w\d.\\]+)[^-\w\d.\\]?)+,然后继续使用[^-\w\d.\\]替换""

老实说,鉴于细节有限,最好的功能是这样的:

var fileName = "\patrick-test-file.txt";

但是半开玩笑,除了有限的细节,最好的办法是做几个字符串函数:

var yuckyString = @"����\�p�a�t�r�i�c�k�-�t�e�s�t�-�f�i�l�e�.�t�x�t������x�SMB2";
var fileNameArea = yuckyString.Split(new[] { "��" }, StringSplitOptions.RemoveEmptyEntries)[0];
var fileName = fileNameArea.Replace("�", "");

当然,没有列出语言,所以我使用C#。此外,如果这些特殊字符存在不规则性,答案也会改变。由于信息有限,模式似乎很清楚。