在字符串中查找特定短语之前的单词

3

我试图在所有这些情况中找到特定短语"is better"之前的左侧单词,但不包括输入3

    string input = "I think that green bike is better than the red bike"; // input 1
    string input = "I think that green bike is better";                   // input 2
    string input = "is better than the red one";                          // input 3
    string input = "bike is better";                                      // input 4

我尝试了三种方法,但是这些方法都没有给我想要的结果,即在除输入3之外的所有三个输入情况下,在搜索短语"is better"之前只找到左侧单词,此处为"bike",而不搜索短语本身。请注意保留所有HTML标签。
    var matches = Regex.Matches(input, @"(?:\S+\s)?\S*is better\S*(?:\s\S+)?", RegexOptions.IgnoreCase);
    var list = matches.Cast<Match>().Select(match => match.Value).ToList();

    foreach (string x in list)
    {
        Console.WriteLine("1) " + x);
    }

2)

     var regex = new Regex(@"(?:is better\s)(?<word>\b\S+\b)");
     var matchCollection = regex.Matches(input);

     foreach (Match match in matchCollection)
     {
        Console.WriteLine("2) " + match.Groups["word"].Value);
     }

3)

string pattern = @"(?<before>\w+) is better (?<after>\w+)";           
MatchCollection matche = Regex.Matches(input, pattern);

for (int i = 0; i < matche.Count; i++)
{
    Console.WriteLine("3) before: " + matche[i].Groups["before"].ToString());
    Console.WriteLine("3) after: " + matche[i].Groups["after"].ToString());
}

使用 输入 1: "我认为绿色自行车比红色自行车更好" 的结果是:

1) bike is better than
2) than
3) before: bike
3) after: than
1)的结果是短语"is better"的左右两个单词。2)的结果是"is better"后面的"then"单词。3)的结果再次是前后两个单词,正是我所需要的,但这种方法的问题在于第二个结果中已经显现出来了。
对于输入2:"我认为绿色自行车更好"的结果是:
1) bike is better
1)的结果是单词"bike",它在短语"is better"之前,但包含了搜索短语"is better"2)的结果为空,因为它查找"is better"之后的单词,所以结果是正确的。即使单词"bike""is better"之前存在,但如果"is better"之后没有其他单词并且它是字符串中的最后一个单词,则3)的结果也为空。
使用输入 3:"is better than the red one",结果如下:
1) is better than
2) than

1)的结果是,在"is better"后面存在一个正确的单词,因为前面的单词不存在,并且再次搜索包含"is better"的短语。结果1)是在"is better"后面的单词"then"

而带有输入4:"bike is better"的结果是:

1) bike is better
2个回答

1

Try this one:

\w+(?=\sis better)

它将匹配 bike,除了第三个输入。


0

原始的方式 (\w+) 更好 第一组:将会给你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接