我有以下正则表达式:
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框架内置的。
非常感谢!
答案 0 :(得分:1)
@ ahmed-abdelhameed提出的解决方案解决了这个问题,我忘记了非贪婪。
Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*?)\"
谢谢!
答案 1 :(得分:0)
在storePath
组中,您匹配任何字符的零次或多次(贪婪匹配)。贪婪匹配意味着它将返回尽可能多的字符,因此它会保持匹配字符,直到它到达最后一次出现的"
。
您需要做的是将.*
替换为.*?
,将贪婪的匹配转换为惰性匹配。延迟匹配意味着它将返回尽可能少的字符,因此在您的情况下,它将保持匹配字符,直到它到达第一次出现"
。
只需用以下内容替换你的正则表达式:
Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*?)\"
答案 2 :(得分:0)
易于阅读:
Class="(.+?)".+?StorePath="(.+?)"
。+?说比赛不贪心,基本上尽量少搭配。 这将使它捕获到下一个&#34;