使用Regex插入序列编号

时间:2017-04-03 21:10:59

标签: c# regex

目前(使用C#)我正在使用字符串方法 Instr 子字符串插入将部分编号放入字符串中。即使该方法工作正常,但是如果需要扩展它,它会非常混乱并且不易管理,因为后台还有其他内容。 我想知道是否可以使用Regex插入节号而不是使用标准字符串方法?如果是这样,它是如何完成的?

例如:

原始字符串

  

快速的红狐狸。跳过懒狗?快速的红狐狸!   “跳过”懒狗。

使用正则表达式输出

  

1)快速的红狐狸。 2)跳过懒狗? 3)快速红色   狐狸! “4)跳过”懒狗。

PS:这是我在没有正则表达式的情况下使用的当前方法:

public string[] ApplyContentNumbering(string[] lines)
{
    int count = 1;
    if (lines != null && lines.Length > 0)
    {
        lines[0] = String.Format("{0} {1}", Chapter, lines[0].Substring(0));
        bool isOpen = false;

        for (int index = 1; index < lines.Length; index++)
        {
            count++;
            lines[index] = String.Format("{0} {1}", count, lines[index].Substring(0));

            if (lines[index].IndexOf("\"") > 0)
            {
                for (int c = 0; c < lines[index].Length; c++)
                {
                    if (lines[index].Substring(c, 1).Equals("\""))
                    {
                        if (isOpen == false)
                        {
                            count++;
                            lines[index] = lines[index].Insert(c + 1, String.Format("{0}", count));
                            isOpen = true;
                        }
                        else
                        {
                            isOpen = false;
                        }
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以在此处使用近似(或&#34;足够好的&#34;)方法,其中包括在字符串开头/标点符号后添加递增数字和1 +空格接着是一个大写字母。

这是C# demo

public boolean shouldOverrideUrlLoading(WebView view, String url) {
  // TODO: start custom tabs for the url
  return true;
}

正则表达式 - (^|\p{P}\s+)("?\p{Lu}) - 匹配:

  • var pat = @"(^|\p{P}\s+)(""?\p{Lu})"; var s = "The quick red fox. Jumped over the lazy dog? The quick red fox! \"Jumped over\" the lazy dog."; var cnt = 0; var res = Regex.Replace(s, pat, m => string.Format("{0}{1}) {2}", m.Groups[1].Value, ++cnt, m.Groups[2].Value)); Console.WriteLine(res); // => 1) The quick red fox. 2) Jumped over the lazy dog? 3) The quick red fox! 4) "Jumped over" the lazy dog. - 第1组捕获字符串或标点符号和1 +空格的开头
  • (^|\p{P}\s+) - 第2组捕获可选的("?\p{Lu}),然后是大写字母。

要以更可靠的方式将文本分成句子,您最好使用一些NLP包。