如何在Substring中第一次出现char

时间:2011-12-28 02:33:36

标签: c# regex

我正试图在我的子串起点中首次出现:

string dir = Request.MapPath(Request.ApplicationPath) + "\\App_GlobalResources\\";

foreach (var file in Directory.EnumerateFiles(dir, "*.resx"))
{
    ddlResources.Items.Add(new ListItem { Text = file.Substring(firstoccuranceof("."), file.LastIndexOf(".")), Value = file });
}

如果我执行file.Substring(file.IndexOf(“。”),file.LastIndexOf(“。”))我收到错误

7 个答案:

答案 0 :(得分:14)

要回答您的实际问题 - 您可以使用string.IndexOf来获得第一次出现的字符。请注意,您需要从LastIndexOf调用中减去此值,因为Substring的第二个参数是要获取的字符数,而不是开始和结束索引。

但是......您可以直接使用Path.GetFilenameWithoutExtension来获取文件名,而不是解析名称。

答案 1 :(得分:9)

首次出现

String.IndexOf('.')

上次出现

String.LastIndexOf('.')

答案 2 :(得分:6)

使用IndexOfLastIndexOf字符串方法获取“搜索”字符串的第一次和最后一次出现的索引。您可以使用System.IO.Path.GetExtension()System.IO.Path.GetFileNameWithoutExtension()System.IO.Path.GetDirectoryName()方法来解析路径。

例如,

string file = @"c:\csnet\info.sample.txt";
Console.WriteLine(System.IO.Path.GetDirectoryName(file));           //c:\csnet
Console.WriteLine(System.IO.Path.GetFileName(file));                //info.sample.txt
Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(file));//info.sample
Console.WriteLine(System.IO.Path.GetExtension(file));               //.txt

答案 3 :(得分:1)

file.IndexOf( “”)

应该让你第一次出现“。”。否则,如果没有找到它将返回-1。

答案 4 :(得分:0)

我认为在您的特定情况下,您不是要尝试使用IndexOf ...而是需要使用0,因为如果正确理解您正在尝试基于文件名创建密钥:

`ddlResources.Items.Add(new ListItem(file.Substring(0, file.LastIndexOf(".")), file ));`

此外,你在新的ListItem {...}中有'{}',这也会导致语法错误......无论如何看看..

答案 5 :(得分:0)

因为原始问题用[regex]标记标记,所以我将提供以下解决方案,但是使用.NET简单解析路径的最佳答案不是正则表达式。

//extracts "filename" from "filename.resx"
string name = Regex.Match("filename.resx", @"^(.*)\..+?$").Groups[1].Value; 

为简单起见,请使用依赖于Path类的答案。其他答案包含该信息。

答案 6 :(得分:0)

给你!)

使用字符串变量类型

int index = str.IndexOf(@"\");

“C:\Users\somebody\Desktop\aFolder\someFile”

https://www.peachpit.com/articles/article.aspx?p=31938&seqNum=12#:~:text=To%20find%20the%20first%20or,string%20you%20are%20searching%20for