我想为以下情况写一个正则表达式:
我想找出句子中是否存在“how”这个词,然后显示与how相关的内容
我想找出句子中是否存在“帮助”一词,然后显示与帮助相关的内容
如果句子中同时存在how和help,则从给定句子中的Help和How中找出哪个词先出现,并根据其显示相应的内容
例如,如果句子是“Help you, but how” 在这种情况下,应显示与“帮助”相关的内容,如果句子是“如何帮助你”,在这种情况下,应显示与“如何”相关的内容。
我写了一段 C# 代码,比如,
if (((Regex.Match(sentence, @"(\s|^)how(\s|$)").Success) &&
(Regex.Match(sentence, @"(\s|^)help(\s|$)").Success)) ||
Regex.IsMatch(sentence, @"(\s|^)how(\s|$)", RegexOptions.IgnoreCase))
{
Messegebox.show("how");
}
else if (Regex.IsMatch(sentence, @"(\s|^)help(\s|$)", RegexOptions.IgnoreCase))
{
Messegebox.show("help");
}
但是它不起作用,有人可以帮我解决这个问题吗? (我已经在这里提出了前 2 个问题的问题,并且根据那个问题的答案我写了上面的代码,但它不适用于第 3 个问题)
请您参考如下方法:
您可以使用 Negative Look Behinds 来匹配“how”,即使后面没有“help”,反之亦然。
代码应该是这样的:
static Regex how = new Regex(@"(?<!\bhelp\b.*)\bhow\b", RegexOptions.IgnoreCase);
static Regex help = new Regex(@"(?<!\bhow\b.*)\bhelp\b", RegexOptions.IgnoreCase);
static void Main(String[] args)
{
Console.WriteLine(helpOrHow("how"));
Console.WriteLine(helpOrHow("help"));
Console.WriteLine(helpOrHow("Help you how"));
Console.WriteLine(helpOrHow("how to help you"));
}
static string helpOrHow(String text)
{
if (how.IsMatch(text))
{
return "how";
}
else if (help.IsMatch(text))
{
return "help";
}
return "none";
}
输出:
how
help
help
how