获取c#中String.indexof之前/之后的字符串

本文关键字:之后 字符串 之前 indexof String 获取 | 更新日期: 2023-09-27 18:21:58

我有这样的文本:

<Parag1>数据层应用程序可以用于处理现有数据库,也可以用于实现新项目和版本。

首先,建议您通过将每个生产数据库注册为数据层应用程序,从现有系统创建数据层应用软件<Parag1>

<Parag2>然后,用户可以提取每个数据库以生成DAC包,并将包发送给开发团队<Parag2>

<Parag3>从那时起,开发人员使用Visual Studio编写数据层更改,对其进行适当的打包,并将更新后的DAC包转发到生产环境<Parag3>

<Pagag4>反过来,DBA可以使用数据层应用程序框架提供的自动方法和工具来升级生产应用程序<Parag4>

我需要将文本从第1段中的"与现有数据库"提取到第2段的"要生成的每个数据库"。

使用以下输入,我如何在c#中获得此结果:

start paragraph : p1
Start character index : 43
/* index of w in 'with' */
Finish paragraph : p2
Finish character index : 47
/* index of e in 'produce' */

获取c#中String.indexof之前/之后的字符串

int i = text.IndexOf("with existing databases");
int i2 = text.IndexOf("each database to produce");
int l = "each database to produce".Length;
string substring = text.Substring(i, i2 - i + l);

您需要保留段落分隔,还是只需要文本?如果段落不相关,我会将这个XML片段加载到XmlDocument对象中,将文本合并到一个字符串中,然后只使用普通的字符串操作进行提取。

 var snippet = //your text here.
 var rawXml = "<text>" + snippet + "</text>"; // Wrap to make valid XML.
 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.LoadXml(rawXml);
 var mergedText = xmlDoc.InnerText;
 int start = mergedText.IndexOf(startMarker);
 int end = mergedText.IndexOf(endMarker) - start;
 mergedText.Substring(start, end);