Regex Group Capture,如何在下一个单词之前停止

时间:2018-05-25 02:42:28

标签: regex regex-group

我有以下正则表达式:

Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*)\"

以下字符串:

Defaults Class="Class name here" StorePath="Any store path here" SqlTable="SqlTableName"

我试图实现以下目标:

class Class name here
storePath Any store path here

但是,我得到的结果是:

class Class name here
storePath Any store path here SqlTable="SqlTableName"

如何在Sqltable文本之前停止?

语言是C#,正则表达式引擎是.NET框架内置的。

非常感谢!

3 个答案:

答案 0 :(得分:1)

@ ahmed-abdelhameed提出的解决方案解决了这个问题,我忘记了非贪婪。

Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*?)\"

谢谢!

答案 1 :(得分:0)

storePath组中,您匹配任何字符的零次或多次(贪婪匹配)。贪婪匹配意味着它将返回尽可能多的字符,因此它会保持匹配字符,直到它到达最后一次出现的"

您需要做的是将.*替换为.*?,将贪婪的匹配转换为惰性匹配。延迟匹配意味着它将返回尽可能少的字符,因此在您的情况下,它将保持匹配字符,直到它到达第一次出现"

只需用以下内容替换你的正则表达式:

Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*?)\"

参考文献:

答案 2 :(得分:0)

易于阅读:

Class="(.+?)".+?StorePath="(.+?)"

。+?说比赛不贪心,基本上尽量少搭配。 这将使它捕获到下一个&#34;