如何在每个文件扩展名后修剪c#中的字符串

时间:2016-03-16 15:07:13

标签: c# visual-studio-2012

我有一串这样的附件:

  

<a href="/departments/Attachments/2043_3162016062557_SharePoint_Health%20Check‌​%20Assessment.docx">SharePoint_Health Check Assessment.docx</a><br><a href="/departments/Attachments/2043_3162016062557_Test%20Workflow.docx">Tes‌​t Workflow.docx</a><br>”。

我用这个方法:

AttachmentName = System.Text.RegularExpressions.Regex.Replace(AttachmentName,  @"<(.|\n)*?>", "String.Empty");

我得到了结果:

SharePoint_Health检查评估.docxTest Workflow.docx

如何使用c#拆分字符串并分别得到每个文件名的结果:

SharePoint_Health Check Assessment.docx

Test Workflow.docx

然后将它们逐个显示出来。

之后我只想要字符串的URL “http://srumos1/departments/Attachments/2053_3172016093545_ITPCTemplate.txt” 和 “http://srumos1/departments/Attachments/2053_3172016093545_ITPCTemplate.txt

我该怎么做

2 个答案:

答案 0 :(得分:2)

如果您没有其他明确的方法可以使用正则表达式来提取文件名。你能试试下面的代码吗?;

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Text.RegularExpressions;

namespace ExtensionExtractingTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileNames = "test.docxtest2.txttest3.pdftest.test.xlxtest.docxtest2.txttest3.pdftest.test.xlxtest.docxtest2.txttest3.pdftest.test.xlxourtest.txtnewtest.pdfstackoverflow.pdf";

            //Add your extensions to regex definition
            Regex fileNameMatchRegex = new Regex(@"[a-zA-Z0-9]*(\.txt|\.pdf|\.docx|\.txt|\.xlx)", RegexOptions.IgnoreCase);
            MatchCollection matchResult = fileNameMatchRegex.Matches(fileNames);
            List<string> fileNamesList = new List<string>();
            foreach (Match item in matchResult)
            {
                fileNamesList.Add(item.Value);
            }
            fileNamesList = fileNamesList.Distinct().ToList();

            Console.WriteLine(string.Join(";", fileNamesList));
        }
    }
}

这里有一个工作示例http://ideone.com/gbopSe

PS:请记住,您必须知道您的文件扩展名,或者您必须预测文件扩展名长度为3或4,这将是一个痛苦的字符串解析操作。

希望这有帮助

答案 1 :(得分:2)

  我是这样得到的            AttachmentName = Regex.Replace(AttachmentName, @"<(.|\n)*?>", string.Empty);

那么你的问题就在那里。你有效的分隔符,但出于某种原因将它们剥离了。将分隔符保留在那里并使用String.Split根据该分隔符对它们进行拆分。

或者用分隔符替换HTML而不是空字符串:

AttachmentName = Regex.Replace(AttachmentName, @"<(.|\n)*?>", "|");

然后基于此分裂:

string[] filenames = AttachmentName.Split(new [] {'|'},
                                          StringSplitOptions.RemoveEmptyEntries);