正则表达式忽略捕获的中间部分

我想要一个正则表达式,当应用于:“firstsecondthird”将匹配“第三个”(在单个组中,即在C# Match.Value将等于“firstthird”)。

那可能吗? 我们可以忽略后缀或前缀,但中间?

匹配以’first’开头的字符串,包含零个或多个其他字符,然后以’third’结尾。 你是这个意思吗?

 "^first(.*)third$" 

或者,你的意思是如果你发现一个字符串’firstsecondthird’,除了’first’和’third’之外什么都没有?

 replace("^(first)second(third)$", "$1$2") 

不,没有工具可以使包含来自目标字符串的非连续文本的单个匹配组。 您需要使用替换,或将匹配的组粘合到一个新的字符串中。

AFAIK,单个正则表达式是不可能的。 您将不得不使用replace(); 如下:

 String inputVar = "firstsecondthird"; String resultVar = Regex.replace(inputVar, "^(first)second(third)$", "$1$2"); 

这可以(通常……)根据需要插入表达式中