INPUT: 垃圾= “stff”,启动1 = “allshortsofCharactersExceptDoubleQuotes”,START2 = “*&安培; ^%$ blahblah”
期望的结果: allshortsofCharactersExceptDoubleQuotes
*&安培; ^%$ blahblah
使用c#.NET:
string myRegExString = @"(?<=start[0-9].).*(?="")"
Yeilds: allshortsofCharactersExceptDoubleQuotes “START2 =” *&安培; ^%$ blahblah
通过测试,我知道如果我用一个除了双引号之外的所有字符的集合替换。*我会得到所需的结果,但这是很多工作,我会弄错。在。*之前也使用(?!“”)或(?!=“”)也不起作用。
那么如何让前瞻停在它找到的第一个双引号上?
从答复中纠正答案(据我测试):
(?<=start\d+="")[^""]*(?="")
OR
(?<=start\d+="")[^""]+(?="")
或者这也有效,但并不是所要求的。
(?<=start\d+="")[^""]*
感谢。我对这个项目的前瞻方面非常感兴趣。
答案 0 :(得分:1)
你应该使用尽可能少匹配的惰性量词.*?
。在你的情况下,.*
会尽可能匹配,因此它会捕获到最后"
(?<=start\d+="").*?(?="")
您可以使用此代码获取此类值的列表
List<string> output=Regex.Matches(input,regex)
.Cast<Match>()
.Select(x=>x.Value)
.ToList();
答案 1 :(得分:0)
正则表达式的问题是。*匹配太多文本。你可以通过在明星之后添加问号来使你的正则表达式变得懒惰,比如'。*?'或者你可以改变它以匹配除了双重quoutes之外的所有东西:'[^"]*'
这是我在这种情况下选择的。以下应该有效。未经测试
string myRegExString = @"(?<=start[0-9].)[^""]*(?="")"
我建议的另一个解决方案是:
string myRegExString = @"(?<=start[0-9].).*?(?="")"
答案 2 :(得分:0)
您可以使用:
@"(?<=start\d="")[^""]+(?="")"
结果是整个模式。