C#解析字符串以获得所需的格式

时间:2015-10-21 15:53:01

标签: c#

试图解析这个:

Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml

并获取

11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015.xml

如何删除"副本"在开始和" -res"最后?

5 个答案:

答案 0 :(得分:1)

更新:如果您要在字符串之间添加Copy和/或-res,并希望保留它们。以下不是最佳答案。您必须使用正则表达式。

但是,如果您正在寻找简单化的内容并想要替换Copy-res所有出现次数,请按以下步骤操作 -

"Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml".Replace("Copy", "").Replace("-res","");

https://dotnetfiddle.net/i3vvGq

答案 1 :(得分:1)

许多人建议使用String.Replace,但这可能不完全正确,因为我们可能会"Copy""-res"字符串出现在中间位置。

您可以尝试使用正则表达式:

string inputStr = "Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml";

var groups = Regex.Match(inputStr, "^Copy(.*)-res.xml$").Groups;        
var group1 = groups[1].Value;            

var output = group1 + ".xml";

试一试:https://dotnetfiddle.net/2AVM3i

答案 2 :(得分:0)

要删除要删除的子字符串,当您在字符串中找到子字符串的索引时,这很容易。

int index = sourceString.IndexOf("Copy11-");
string withFirstRemoved = (index < 0)
? sourceString
: sourceString.Remove(index, removeString.Length);

然后你跟着相同的但是对于另一个字符串 -res

int newIndex = sourceString.IndexOf("-res");
string withFirstRemoved = (index < 0)
? sourceString
: sourceString.Remove(newIndex, withFirstRemoved.Length);

但更好的方法是使用方法,所以如果你以后需要删除其他东西,它会非常灵活! :)

<强>更新

实际上,根据我收到的评论,解决方案有点长。使用Replace而不是CleanStringFromSubstrings将使您可以灵活地删除以后可能遇到的任何字符串和子字符串的子字符串,而不仅仅是因为您目前遇到的问题!

    public string CleanStringFromSubstrings(string original,params string[] listStr)
    {
        foreach (var subStr in listStr)
        {
            original = original.Replace(subStr, "");
        }
        return original;
    }

答案 3 :(得分:0)

找到两个子串并用空字符串替换它们。

myString = myString.Replace("Copy", string.Empty).Replace("-res", string.Empty);

答案 4 :(得分:0)

您可以使用String FirstIndexOf和LastIndexOf方法获取您尝试删除“Copy11-”和“-res”的字符串的起始字符的位置。获得那些索引之后,使用Substring方法获取'Copy11-'之后的所有内容,然后再次使用Substring来获取'-res'之前和之后的所有内容。