c# 使用另一个字符串作为分隔符拆分字符串并将分隔符作为拆分字符串的一部分包含在内

我需要使用 c# regex 拆分输入字符串。需要知道如何在输出中包含分隔符内容,如下所示。

输入:

string content="heading1: contents with respect to heading1 heading2: heading2 contents heading3: heading 3 related contents sample strings";

string[] delimters = new string[] {"heading1:","heading2:","heading3:"};

预期输出:

outputArray[0] = heading1: contents with respect to heading1
outputArray[1] = heading2: heading2 contents
outputArray[2] = heading3: heading 3 related contents sample strings

我试过的:

var result = content.Split(delimters,StringSplitOptions.RemoveEmptyEntries);

我得到的输出:

result [0]: " contents with respect to heading1 "
result [1]: " heading2 contents "
result [2]: " heading 3 related contents sample strings"

我无法在 string.split 或 Regex 中找到 API 来拆分为预期结果。

维克多·斯特里比尤夫

您可以使用基于正向预测的解决方案:

var result = Regex.Split(content, $@"(?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})")
                  .Where(x => !string.IsNullOrEmpty(x))

请参阅C# 演示

var content="heading1: contents with respect to heading1 heading2: heading2 contents heading3: heading 3 related contents sample strings";
var delimiters = new string[] {"heading1:","heading2:","heading3:"};
Console.WriteLine(
    string.Join("\n", 
        Regex.Split(content, $@"(?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})")
             .Where(x => !string.IsNullOrEmpty(x))
    )
);

输出:

heading1: contents with respect to heading1 
heading2: heading2 contents 
heading3: heading 3 related contents sample strings

(?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})会动态地构造一个正则表达式,它看起来像

(?=heading1:|heading2:|heading3:)

请参阅正则表达式演示该模式将基本上匹配字符串中的任何位置herring1:herring2:或者herring3:不消耗这些子字符串,因此它们将出现在输出中。

请注意,这delimiters.Select(m => Regex.Escape(m))是为了确保可能在分隔符中的所有特殊正则表达式元字符都被正则表达式引擎转义并视为文字字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#:需要将一个字符串拆分成一个字符串[],并将分隔符(也是一个字符串)保留在字符串的开头

拆分字符串但保留 C 中的分隔符

C ++将字符串除以另一个字符串作为整体

使用另一个字符串作为分隔符拆分字符串(例如从 123:1 拆分 :1)

在C中进行字符串解析。将字符串的一部分复制到另一个字符串

在 C++ 中查找一个字符串是否包含在另一个没有“查找”的字符串中

C#在分隔符上分割字符串,然后删除一个元素,然后使用分隔符再次加入

C - 将带有重复分隔符字符的字符串拆分为 2 个子字符串

在C中使用分隔符分割字符串

如何拆分嵌入在 C++ 中的分隔符中的字符串?

如何在 C# 中拆分字符串并保留分隔符

具有多个分隔符的C#拆分字符串

C# 字符串在分隔符之間拆分

基于分隔符模式的 C# 字符串拆分 [,]

字符串三角形,以空格作为分隔符C语言

拆分字符串并将分隔符保留为拆分字符串块的一部分,而不是作为单独的列表元素

使用C ++将一个字符串替换为另一个字符串

C# 浮点到字符串分隔符

用分隔符连接 C 中的字符串

拆分一个字符串,c#

在每个位置拆分一个字符串 c#

C strcpy复制字符串并添加另一个字符

使用2个字符串定界符C选择文本文件的一部分

使用字符分隔符在 C++ 中解析字符串,但在每个解析的子字符串(C++ STL)中保留可重复字符作为分隔符

每多个分隔符拆分一个字符串

C++:使用 stringstream 从字符串中提取所需的整数后,获取两个字符串分隔符和值之间的数字

从C脚本中的文件中读取单个字符串,并将其作为url的一部分发送

将字符串插入C中的另一个字符串

C#建立一个字符串,将另一个字符串作为模板/规则/格式进行评估