使用正则表达式查找紧随一组特定单词之后的单词

4

我想使用正则表达式找到一组词后面的字符串。

例如,如果这些词是“these”和“the”,

  1. 这个人-thesePeople-> People

  2. 这个苹果-theApple -> Apple

这可行吗?

主要问题在于"the"是"these"的子字符串。我已经阅读了这个问题并做出了尝试:

@"(?<=the|these)\w+"

但是这个正则表达式对于第一个情况给出的是"sePeople",我无法继续下去。有人可以帮忙吗?

第二个单词是否总是大写?因为 [A-Z]\w+ - string.Empty
无法使用贪婪回顾。一种方法是使用 (?:these|the)(?<word>\w+) 正则表达式匹配所有内容(请注意,这里 these 在正则表达式中排在第一位),并从匹配中提取 word 组。 - Ulugbek Umirov
2个回答

1
您可以使用此正则表达式获取在“the”或“these”之后的每个字符:
the(se){0,1}(\w+)

这个正则表达式总是匹配的。如果也出现了'se',则由第一个捕获组匹配。随后的所有内容都由第二个捕获组匹配。

使用这个表达式,还可以捕获不以'the'或者'these'开头的单词:

(?>the(?>se){0,1}){0,1}(\w+)

你好,感谢您的回答。但是,在我尝试了您在这个网站(https://dotnetfiddle.net)上的建议之后,我的正则表达式仍然返回“sePeople”。 - Seaky Lone
你的链接不起作用。我用regex101.com测试了它,很完美地工作了。确保访问第三个捕获组,这是包含结果的组。 - NoConnection
或者使用这个正则表达式:(?>the(?>se){0,1}){0,1}(\w+),它会忽略前两个捕获组并只匹配单词。我也更新了答案。 - NoConnection

0
如果你所有的单词都按照上述格式进行格式化,那么这个简单的正则表达式 ([A-Z]\w+) 就可以工作了。
string[] words = new string[]{"thesePeople", "theApple"};
foreach(string word in words)
    Console.WriteLine(Regex.Match(word, @"[A-Z]\w+", RegexOptions.None).Groups[0].Value);

输出:

人们

苹果

https://dotnetfiddle.net/aevqlT


1
谢谢您的回答,但很遗憾它们不是这种格式。这只是一个简单的例子。 - Seaky Lone
你是否被迫使用正则表达式?有些代码可以更轻松地解决这个问题。 - string.Empty

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