0

下面的代码正在执行以下功能,我打算将其集成到更大的应用程序中。

  1. 用点 (.) 字符分割大输入字符串input,无论它出现在输入字符串中的什么地方。
  2. 将拆分的子字符串存储到数组中result[]
  3. 在 foreach 循环中,匹配一个子字符串以匹配 关键字的出现。
  4. 如果发生匹配,则从原始输入字符串中匹配的子字符串的位置开始,最多打印300 个字符。

        string[] result = input.Split('.');
        foreach (string str in result)
        {
    
            //Console.WriteLine(str);
            Match m = Regex.Match(str, keyword);
            if (m.Success)
            {
                int start = input.IndexOf(str);
                if ((input.Length - start) < 300)
                {
                    Console.WriteLine(input.Substring(start, input.Length - start));
                    break;
                }
                else
                {
                    Console.WriteLine(input.Substring(start, 300)); 
                    break;
                }
            }
    

输入实际上是大量的文本,我认为这应该通过正则表达式来完成。作为一个新手,我无法使用正则表达式将所有内容放在一起。

匹配关键字。Match m = Regex.Match(str, keyword);

从点 (.) 开始的 300 个字符,即从匹配的句子开始,打印 300 个字符"^.\w{0,300}"

我打算做的是:

  1. 在输入文本中搜索关键字。

  2. 就像找到匹配一样,从包含关键字的句子开始,从输入字符串中打印最多 300 个字符。

    我应该如何进行?请帮忙 。

4

2 回答 2

1

如果我做对了,您需要做的就是找到您的keyword并捕获所有后续内容,直到找到第一个点或达到最大字符数:

@"keyword([^\.]{0,300})"

在此处查看示例演示。

C#代码:

var regex = new Regex(@"keyword([^\.]{0,300})");

foreach (Match match in regex.Matches(input))
{
   var result = match.Groups[1].Value;

   // work with the result
}
于 2012-10-10T09:07:56.070 回答
1

试试这个正则表达式:

(?<=\.?)([\w\s]{0,300}keyword.*?)(?=\.)

解释:

(?= subexpression)零宽度正向超前断言。

(?<= subexpression)零宽度正向回溯断言。

*?匹配前一个元素零次或多次,但尽可能少。

和一个简单的代码:

foreach (Match match in Regex.Matches(input, 
                                      @"(?<=\.?)([\w\s]{0,300}print.*?)(?=\.)"))
{
    Console.WriteLine(match.Groups[1].Value);
}
于 2012-10-10T09:29:23.023 回答