1

我正在尝试在两个字符串之间搜索,从向后看的第二个字符串开始。这可能吗?

例如:我有一个字符串“如果快速的棕色狗跳过懒惰的红色狗,那么......”

我想找到“the”和“red dog”之间的字符。我期待找到“懒惰”。

使用我当前的正则表达式,我得到了太多字符。

(?<=the)(.*)(?=red dog)
4

3 回答 3

0
(?<=the)(.*?)(?=red)

它匹配这些单词之间可能的最少字符,但.匹配所有内容,也许

(?<=the)([a-z ]*?)(?=red dog)

将帮助您仅匹配字母和空格字符

于 2013-11-13T01:04:42.930 回答
0

尝试使用非贪婪量词:

(?<=the)(.*?)(?=red dog)

这将改变表达式的行为,以便内部组将仅匹配满足模式所需的少数字符。

但是,我应该指出,在这种情况下,可能不需要使用环视。你可以简单地使用这样的模式:

.*the(.*?)red dog

并提取相关的捕获组。第一个.*是贪心的,这意味着模式将匹配the它在字符串中可以找到的满足模式的最后一个。

这是 C# 中的一个工作示例:

var input = "If the quick brown dog jumps over the lazy red dog, then...";
var match = Regex.Match(input, ".*the(.*?)red dog");
Console.WriteLine(match.Groups[1].Value); // lazy
于 2013-11-12T14:51:30.260 回答
-1

尝试:

(?:the)(.*)(?:red dog)

并阅读该组:$ 1

于 2013-11-12T14:53:09.273 回答