我有一个包含以下内容的有效内容:
\帕特里克 - 测试 - 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������为捕获组。
如何匹配文件名的字符,可以是任何长度可变的字符,并且可以包含字母数字字符?这是纯粹的正则表达式吗?
非常感谢任何帮助。
答案 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#。此外,如果这些特殊字符存在不规则性,答案也会改变。由于信息有限,模式似乎很清楚。