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

本文关键字:格式 字符串 | 更新日期: 2023-09-27 18:18:38

尝试解析:

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

和get

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

如何删除开头的"copy"和末尾的"-res"?

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

UPDATE:如果您将在字符串之间有Copy和/或-res,并希望保留它们。以下不是最好的答案。你必须使用正则表达式。

但是,如果您正在寻找一些简单的东西,并希望替换所有出现的 Copy-res,这就是您如何做到这一点-

"Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml".Replace("Copy", "").Replace("-res","");
https://dotnetfiddle.net/i3vvGq

许多人建议使用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

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

要删除那些您想要删除的子字符串,当您在字符串中找到子字符串的索引时,这是相当容易的。

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

则后面跟着相同但适用于另一个字符串- r

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;
    }

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

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