我有一个大的字符串,由换行符分隔。
示例:
这是我的第一句话,在这里我将搜索我的单词
这是我的第二句话
使用下面的代码,如果我搜索“ my”,它将仅从第一句话而不是第二句话返回“ my”的2个实例。
我希望显示在其中找到该词组的句子-可以正常工作,但只是在找到第一个换行符后不搜索任何内容。
代码;
var regex = new Regex(string.Format("[^.!?;]*({0})[^.?!;]*[.?!;]", userSearchCriteraInHere, RegexOptions.Singleline));
var results = regex.Matches(largeStringInHere);
for (int i = 0; i < results.Count; i++)
{
searchCriteriaFound.Append((results[i].Value.Trim()));
searchCriteriaFound.Append(Environment.NewLine);
}
代码编辑:
string pattern = @".*(" + userSearchCriteraInHere + ")+.*";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(largeStringInHere, pattern, options))
{
searchCriteriaFound.Append(m.Value);
}
答案 0 :(得分:1)
是否有特定的原因不能以以下方式多次搜索“我”一词:
(my)+
您可以在Regex101上的以下URL上对其进行测试:https://regex101.com/r/QIHWKf/1
如果要匹配带有“ my”的整个句子,则可以使用以下内容:
.*(my)+.*
https://regex101.com/r/QIHWKf/2
这是完整的句子,而第一组是“我的”。
答案 1 :(得分:1)
var userSearchCriteraInHere = "my";
var largeStringInHere = @"This is my first sentence and here i will search for the word my.
This is my second sentence.";
var regex = new Regex(string.Format("[^.!?;]*({0})[^.?!;]*[.?!;]", userSearchCriteraInHere), RegexOptions.Singleline);
var results = regex.Matches(largeStringInHere);
Console.WriteLine(results.Count);
var searchCriteriaFound = new StringBuilder();
for (int i = 0; i < results.Count; i++)
{
searchCriteriaFound.Append((results[i].Value.Trim()));
searchCriteriaFound.Append(Environment.NewLine);
}
Console.Write(searchCriteriaFound.ToString());
这将返回以下输出:
2
This is my first sentence and here i will search for the word my.
This is my second sentence.
正如您的正则表达式期望的那样,我确实需要在句子的末尾添加句点。
答案 2 :(得分:0)
更改
Regex(string.Format("[^.!?;]*({0})[^.?!;]*[.?!;]", userSearchCriteraInHere, RegexOptions.Singleline)
收件人
Regex(string.Format("[^.!?;]*({0})[^.?!;]*[.?!;]", userSearchCriteraInHere, RegexOptions.Multiline)
这会将符号^和$的含义更改为一行的开头/结尾,而不是整个字符串。
答案 3 :(得分:0)
您可以使用单词边界\b
来防止它成为更大匹配项的一部分,例如mystery
,并将选项更改为RegexOptions.Multiline
而不是RegexOptions.Singleline来让{ {1}}和^
与行尾匹配。
$
答案 4 :(得分:0)
要获取所有包含“我的”单词的行,您可以尝试以下操作:
代码
static string GetSentencesContainMyWord(StreamReader file)
{
int counter = 0;
string line;
var sb = new StringBuilder();
while ((line = file.ReadLine()) != null)
{
if (line.Contains("my"))
sb.Append(line + Environment.NewLine);
counter++;
}
return sb.ToString();
}