我正在try 对以下内容执行全局搜索:

\n123 ABC\n多行\n234 xyz\n567 PQR\n422 ABCDEF\n999 eof

我的意图是从以上几个方面返回:

123 abc
multi-lines

234 xyz

567 pqr

422 abcdef

我的正则表达式是"(?S)\n(\d{1,3}.*?)\d".但是,用作结束分隔符的数字在匹配中被"消耗",而不用作下一个匹配的开始分隔符.因此,我只获得了结果的备用组:

123 abc
multi-lines

567 pqr

有没有一个正则表达式可以实现我所需要的?

我可以做第一遍来修改源代码,以便在每个数字之前添加一个特殊的分隔符,但有没有更好的解决方案?

推荐答案

如果您希望将起始位限制为1到3位,则必须在它之后使用边界,否则您可以仅从与单个位匹配开始.

然后,您可以断言换行符后跟数字,也可以断言字符串的结尾.

如果替换,则使用完全匹配,后跟换行符.

请注意,如果您想要匹配C#中的数字0-9,您可以使用[0-9]而不是\d,这将匹配任何数字.

(?s)\r?\n\d{1,3}\b.*?(?=\r?\n\d|$)

Regex demo

或者在仅具有匹配项的Java脚本中,其中[^]*?匹配包括换行符在内的任何字符:

\n\d{1,3}\b[^]*?(?=\n\d|$)

Regex demo

const regex = /\n\d{1,3}\b[^]*?(?=\n\d|$)/g;
const str = `
123 abc
multi-lines 
234 xyz 
567 pqr 
422 abcdef 
999`;
const result = str.replace(regex, `$&\n`);
console.log(result);

Csharp相关问答推荐

try 使用Microsoft Curve通过外部c#应用程序将Azure AD B2C用户分配到组- . PostAsynock错误CS1061

如何在Shell中创建WinUI 3图形界面?

当我 for each 请求创建实例时,我是否应该在C#中部署httpClient?

应用程序启动时出现错误:操作无法同时使用表单和SON主体参数

MongoDB实体框架核心:表达必须可写

我可以 suppress 规则CS 9035一次吗?

总是丢弃返回的任务和使方法puc无效之间有区别吗?

向类注入一个工厂来创建一些资源是一个好的实践吗?

C++/C#HostFXR通过std::tuple传递参数

. NET 8控制台应用程序DI错误无法解析Microsoft. Extension. Logging. ILoggerFactory类型的服务'''

如果属性名为xyz,我需要使用System.Text.Json修改字符串类型的值""<>

Appsettings.json未加载.Net 8 Blaazor Web程序集

MS Graph v5.42.0:在寻呼消息时更改页面大小

调用Task.Run()与DoSomethingAsync()有什么不同?

如何将MemberInitExpression添加到绑定中其他Lambda MemberInitExpression

具有可空类型的C#NOTNULL约束具有意外行为

在C#中,是否有与变量DISARD对应的C++类似功能?

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

如何使用EPPlus C#在单个单元格中可视化显示多行文字

多个参数的最小API删除