You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何获取句号前的文本?是否有类似SQL的SubString和CharIndex方法

在C#中提取文件名里句号前的数字(类似SQL的SUBSTRING/CHARINDEX)

当然有啦!C#里不仅有和SQL Server的SUBSTRING、CHARINDEX对应的方法,还有几种更简便的方式来处理你这种提取文件名特定部分的需求。下面给你几种实用的实现方案:

1. 用C#对应SQL的方法组合(精准控制)

C#里的String.IndexOf()对应SQL的CHARINDEX(查找字符位置),String.Substring()对应SUBSTRING(截取子串)。针对你的场景,我们可以先找到句号的位置,再找到最后一个空格的位置,然后截取两者之间的内容:

string input = "This is a report 12000.csv";
// 找到句号的索引位置
int dotPosition = input.IndexOf('.');
// 找到最后一个空格的索引位置
int lastSpacePosition = input.LastIndexOf(' ');
// 截取空格后到句号前的部分
string targetNumber = input.Substring(lastSpacePosition + 1, dotPosition - lastSpacePosition - 1);
Console.WriteLine(targetNumber); // 输出: 12000

这种方法的好处是逻辑清晰,即使输入文本里有多个空格或其他特殊字符,只要格式是“... 数字.后缀”就能精准提取。

2. 用Split()方法快速分割(简洁高效)

如果你的输入格式固定(数字前是最后一个空格,后面紧跟句号),用Split()分割会更简洁:

string input = "This is a report 12000.csv";
// 先按空格分割取最后一段,再按句号分割取第一段
string targetNumber = input.Split(' ').Last().Split('.')[0];
Console.WriteLine(targetNumber); // 输出: 12000

一行代码就能搞定,非常适合格式稳定的场景。

3. 用Path类处理文件名(专业场景推荐)

因为你的输入是文件名,C#的System.IO.Path类专门提供了处理文件路径/名称的方法,用它来提取会更专业:

using System.IO;

string input = "This is a report 12000.csv";
// 先获取不带扩展名的文件名部分(即"This is a report 12000")
string nameWithoutExtension = Path.GetFileNameWithoutExtension(input);
// 再按空格分割取最后一段就是目标数字
string targetNumber = nameWithoutExtension.Split(' ').Last();
Console.WriteLine(targetNumber); // 输出: 12000

这种方法的优势是自动处理各种扩展名情况(比如带多个点的扩展名也能正确识别),更符合文件操作的最佳实践。

内容的提问来源于stack exchange,提问作者Geezer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:14:58