【问题标题】:Make a line break when identifying (number + string)识别时换行(数字+字符串)
【发布时间】:2020-11-21 23:19:30
【问题描述】:

我有以下几句话:

12《世界... 13终结 14》我还有16年 15吻我

我需要像这样分开它:

12“世界...

13结束

14"我还有 16 年

15吻我

为了分开,我用(number + string)例子(123xxx)

任何与字符串连接的数字都需要break \n 之前。

我使用了下面的正则表达式,但是它没有考虑特殊符号,文本中会有几个符号。甚至自己选择一个数字

\d+\w+

我在 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");            
}

如何制作一个接受(number + string) 并生成一行break 的正则表达式?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    你可以使用

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

    请参阅regex demo

    详情

    • \s+ - 一个或多个空白字符
    • (?=\d+[^\s\d]) - 正向前瞻匹配紧随其后的 1 个以上数字,然后是除数字和空格以外的数字的位置。

    C# demo

    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
    

    【讨论】:

      【解决方案2】:

      你可以试试下面的例子:

      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));
      

      【讨论】:

      • 不是有 5 次匹配吗?检查this link。 OP 预期是 4 场比赛。
      • 是的,会有五场比赛
      • 所以,这个正则表达式不会有帮助,对吧?此外,我看不到 OP 如何在现有代码中使用它,每个匹配项都将简单地替换为换行符。
      • 不,你只添加了一个可选的数字/非数字字符串,如果还有更多呢?不过,这不适用于当前的 OP 代码。
      • var 匹配 = Regex.Matches(value, "[\\d]+((\\s+)|(?[^\\d]+))").ToArray( ); var result = string.Join("",matches.Select(x=> x.Index != 0 && x.Groups["g2"].Success?$"{System.Environment.NewLine}{x.Value}" : x.Value));
      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2015-05-24
      • 2018-03-14
      • 2020-03-30
      • 1970-01-01
      • 2014-10-04
      • 2017-11-16
      相关资源
      最近更新 更多