如何在字符串中重复的某个字符中提取字符串?

时间:2012-05-16 18:51:40

标签: c# .net

如何从“MyLibrary.Resources.Images.Properties.Condo.gif”字符串中获取“MyLibrary.Resources.Images.Properties”和“Condo.gif”。

我还需要能够处理类似“MyLibrary.Resources.Images.Properties.legend.House.gif”的内容并返回“House.gif”和“MyLibrary.Resources.Images.Properties.legend”。< / p>

IndexOf LastIndexOf无效,因为我需要倒数第二个'。'字符。

提前致谢!

更新
感谢到目前为止的答案,但我真的需要它能够处理不同的命名空间。所以我真正要问的是如何分割字符串中的倒数第二个字符?

7 个答案:

答案 0 :(得分:1)

你可以使用Regex或String.Split和'。'作为分隔符并返回倒数第二个''。' +最后的作品。

答案 1 :(得分:1)

您可以查找IndexOf("MyLibrary.Resources.Images.Properties."),将其添加到MyLibrary.Resources.Images.Properties.".Length,然后从该位置添加.Substring(..)

答案 2 :(得分:1)

如果您确切地知道自己在寻找什么,并且它正在追踪,那么您可以使用string.endswith。像

这样的东西
if("MyLibrary.Resources.Images.Properties.Condo.gif".EndsWith("Condo.gif"))

如果不是这种情况,请查看regular expressions。然后你可以做类似

的事情
if(Regex.IsMatch("Condo.gif"))

或者更通用的方法:将字符串拆分为'。'然后抓住数组中的最后两个项目。

答案 3 :(得分:1)

您可以使用LINQ执行以下操作:

string target = "MyLibrary.Resources.Images.Properties.legend.House.gif";

var elements = target.Split('.');

const int NumberOfFileNameElements = 2;

string fileName = string.Join(
    ".", 
    elements.Skip(elements.Length - NumberOfFileNameElements));

string path = string.Join(
    ".", 
    elements.Take(elements.Length - NumberOfFileNameElements));

这假定文件名部分只包含一个.字符,因此为了获得它,您可以跳过剩余元素的数量。

答案 4 :(得分:1)

string input = "MyLibrary.Resources.Images.Properties.legend.House.gif";
//if string isn't already validated, make sure there are at least two 
//periods here or you'll error out later on.
int index = input.LastIndexOf('.', input.LastIndexOf('.') - 1);
string first = input.Substring(0, index);
string second = input.Substring(index + 1);

答案 5 :(得分:1)

尝试将字符串拆分为数组,方法是将其分隔为每个'。'字符。

然后你会有类似的东西:

 {"MyLibrary", "Resources", "Images", "Properties", "legend", "House", "gif"}

然后你可以采用最后两个元素。

答案 6 :(得分:1)

只需分解并在char循环中执行:

int NthLastIndexOf(string str, char ch, int n)
{
    if (n <= 0) throw new ArgumentException();
    for (int idx = str.Length - 1; idx >= 0; --idx)
        if (str[idx] == ch && --n == 0)
            return idx;

    return -1;
}

这比尝试使用字符串拆分方法哄它更便宜,而且不是很多代码。

string s = "1.2.3.4.5";
int idx = NthLastIndexOf(s, '.', 3);
string a = s.Substring(0, idx); // "1.2"
string b = s.Substring(idx + 1); // "3.4.5"