c# - C# 使用 Regex.Split 拆分大字符串。必须保留分隔符
问题描述
我正在尝试使用正则表达式将一堵文本墙拆分为一个数组,它运行良好,但我不希望它删除我正在使用的分隔符。我已经研究了前瞻功能,但我无法让它正常工作或根本无法工作。
我有以下正则表达式,它在以下组合“Artículo #.”、“Artículo ##.”、1)、2) 等和 a)、b)、c) 和“Párrafo”一词处拆分。
var result = Regex.Split(text, @"(Artículo)\s[0-9](.)|(Artículo)\s[0-9][0-9](.)|[a-z](\))|[1-9](\))|[1-9][0-9](\))|(Párrafo)", RegexOptions.None);
我需要保留我用来拆分的关键字。例如我有以下文字
Artículo 1. This is a test that includes : 1) Sample text 2) Sample text
Crrently我得到:
This is a test that includes :
Sample text
Sample text
我需要的:
Artículo 1. This is a test that includes :
1) Sample text
2) Sample text
我觉得我已经接近了,但任何帮助都会很棒。
解决方案
您可以使用
var text = "Artículo 1. This is a test that includes : 1) Sample text 2) Sample text";
var result = Regex.Split(text, @"(?!^)\s+(?=\bArtículo\s+[0-9]+\.|[a-z]\)|[1-9]\d?\)|\bPárrafo\b)", RegexOptions.None);
Console.WriteLine(string.Join("\n", result));
// => Artículo 1. This is a test that includes :
// => 1) Sample text
// => 2) Sample text
正则表达式是
(?!^)\s+(?=\bArtículo\s+[0-9]+\.|[a-z]\)|[1-9]\d?\)|\bPárrafo\b)
它匹配
(?!^)
- 字符串开头以外的位置\s+
- 1+ 个空格(如果使用\s*
,则需要.Where(x => !string.IsNullOrEmpty(x))
在Regex.Split
通话后添加)(?=\bArtículo\s+[0-9]+\.|[a-z]\)|[1-9]\d?\)|\bPárrafo\b)
- 紧随其后的位置\bArtículo\s+[0-9]+\.|
- 整个单词Artículo
、1+ 个空格、1+ 个 ASCII 数字和 a.
,或[a-z]\)|
- 小写 ASCII 字母和)
, 或[1-9]\d?\)|
- 一个非零数字,然后是一个可选数字和一个)
,或\bPárrafo\b
- 一个完整的词Párrafo
。
推荐阅读
- swift - 如何在 ARKit 中使用我自己的遮挡 ML 模型?
- xamarin.mac - 如何在 .NET 6 中创建引用 Xamarin.Mac.dll 的控制台应用程序
- c# - 不能蹲下为我的平台游戏工作
- l-systems - 如何从图像构建 l 系统
- java - Java Spring boot Application后几次请求502坏网关
- android - Android Monzo 风格的开关按钮设计
- python - 无论输入如何,项目都添加到列表中
- java - 为什么我不能使用 for 循环实例化新对象来填充数组?
- java - 生成一个随机整数列表(从-1000到1000),列表中的整数个数由用户输入决定
- python - 如何迭代和获取动态列表?