在确定(数字+字符串)时进行换行

4
我有如下文字:

12"世界... 13结局 14"我16岁了 15吻我

我需要将其分开,如下所示:

12"世界...

13结局

14"我16岁了

15吻我

为了分隔,我使用 (数字 + 字符串) 的格式,例如 (123xxx)
任何与字符串连接的数字都需要在之前进行断行\n
我使用了下面的正则表达式,但它没有考虑到特殊符号,并且文本中会有多个符号。你需要选择一个数字。
\d+\w+

enter image description here

我正在使用C#编写这段代码,我只需要放入一个有效的正则表达式:

private void method()
{
    string text = "12\"The world... 13The end 14\"I have 16 years 15Kiss me";
    string ntext = Regex.Replace(text, @"\d+\w+", "\n");            
}

如何编写一个正则表达式,将 (数字 + 字符串) 转换为换行符 break
2个回答

2

您可以使用

Regex.Replace(text, @"\s+(?=\d+[^\s\d])", "\n")

请查看正则表达式演示

细节

  • \s+ - 匹配一个或多个空白字符
  • (?=\d+[^\s\d]) - 正向预查,匹配紧接着一或多个数字和不是数字或空格的数字的位置。

请查看C# 演示

var text = "12\"The world... 13The end 14\"I have 16 years 15Kiss me";
Console.WriteLine(Regex.Replace(text, @"\s+(?=\d+[^\s\d])", "\n"));

输出:

12"The world...
13The end
14"I have 16 years
15Kiss me

1
您可以尝试下面的示例:
var matches = Regex.Matches(value, "[\\d]+((\\s+[^\\d]+)|(?<g2>[^\\d]+))").ToArray();
var result = string.Join("",matches.Select(x=> x.Index != 0 &&  x.Groups["g2"].Success? $"{System.Environment.NewLine}{x.Value}" : x.Value));

enter image description here


是的,将会有五场比赛。 - Stanislav
2
所以,这个正则表达式不会有帮助,对吧?而且,我也看不出来OP如何在现有的代码中使用它,每个匹配都只会被替换为一个换行符。 - Ryszard Czech
1
不,你只添加了一个可选的数字/非数字字符串,如果还有更多呢?当前的操作代码仍然无法正常工作。 - Ryszard Czech
var matches = Regex.Matches(value, "[\d]+((\s+)|(?<g2>[^\d]+))").ToArray(); var result = string.Join("",matches.Select(x=> x.Index != 0 && x.Groups["g2"].Success? $"{System.Environment.NewLine}{x.Value}" : x.Value)); - Stanislav
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接