regex 用于执行字符串函数正在执行的任务的正则表达式

q0qdq0h2  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(88)

下面的代码执行以下功能,我打算集成到更大的应用程序。
1.将大的输入字符串input在输入字符串中出现的任何地方按点(.)字符拆分。
1.将拆分后的子串存储到数组result[]中;
1.在foreach循环中,匹配一个子字符串以匹配关键字的出现。
1.如果匹配,则从该匹配子串在原始输入字符串中的位置开始,最多打印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.在输入文本中搜索关键字。
1.就像找到匹配一样,从包含关键字的句子开始,并从输入字符串中打印最多300个字符。
我该怎么做?请帮帮我

aij0ehis

aij0ehis1#

如果我没弄错的话,你需要做的就是找到你的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
}
ikfrs5lh

ikfrs5lh2#

试试这个正则表达式:

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

说明:

***(?= subexpression)***零宽度正前瞻Assert。
***(?<= subexpression)***零宽度正向后看Assert。
****?***匹配前一个元素零次或多次,但次数越少越好。

一个简单的代码:

foreach (Match match in Regex.Matches(input, 
                                      @"(?<=\.?)([\w\s]{0,300}print.*?)(?=\.)"))
{
    Console.WriteLine(match.Groups[1].Value);
}

相关问题