我正在尝试在两个字符串之间搜索,从向后看的第二个字符串开始。这可能吗?
例如:我有一个字符串“如果快速的棕色狗跳过懒惰的红色狗,那么......”
我想找到“the”和“red dog”之间的字符。我期待找到“懒惰”。
使用我当前的正则表达式,我得到了太多字符。
(?<=the)(.*)(?=red dog)
我正在尝试在两个字符串之间搜索,从向后看的第二个字符串开始。这可能吗?
例如:我有一个字符串“如果快速的棕色狗跳过懒惰的红色狗,那么......”
我想找到“the”和“red dog”之间的字符。我期待找到“懒惰”。
使用我当前的正则表达式,我得到了太多字符。
(?<=the)(.*)(?=red dog)
(?<=the)(.*?)(?=red)
它匹配这些单词之间可能的最少字符,但.
匹配所有内容,也许
(?<=the)([a-z ]*?)(?=red dog)
将帮助您仅匹配字母和空格字符
尝试使用非贪婪量词:
(?<=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
尝试:
(?:the)(.*)(?:red dog)
并阅读该组:$ 1