[英]Regular expression for performing task being done by string functions
以下代码执行以下功能,我打算将其集成到更大的应用程序中。
input
通过无论它在输入串发生点(。)的字符。 result[]
; 如果发生匹配,则从原始输入字符串中此匹配子字符串的位置开始,最多打印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}"
我打算做的是:
在输入文本中搜索关键字。
就像找到匹配项一样, 从包含关键字的句子开始,从输入字符串打印最多300个字符。
我该怎么办? 请帮忙 。
如果我做对了,您需要做的就是找到您的keyword
并捕获所有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
}
试试这个正则表达式:
(?<=\.?)([\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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.