我正在使用visual studio中的find / replace选项。
我有这个:
new GeoState { Name = "Arizona", Abbreviation = "AZ", Country = "US" },
想要改变它:
new GeoState { Abbreviation = "AZ", Country = "US" },
对于我文件中出现的所有状态。有效删除Name
属性。
正在运行的正则表达式查找/替换表达式是:
查找
new GeoState { Name = ".*",
替换:
new GeoState {
但是,在上面的示例中,找到以下内容:
new GeoState { Name = "Arizona", Abbreviation = "AZ",
将其更改为:
new GeoState { Country = "US" },
为什么Abbreviation = "AZ",
包含在选择中?它应该在通配符之后的",
的第一个实例上终止。
答案 0 :(得分:2)
模式贪婪:".*",
这与名称匹配,但继续"AZ",
,因为它也匹配。它停在那里,因为Abbreviation
是以逗号结尾的最后一件事。
要使其非贪婪使用:".*?"
额外?
表示它现在匹配零个或多个字符,但尽可能少。所以现在当它遇到第一个带双引号的项目以逗号结尾时,它将正确地停在"Arizona",
。
或者,您可以使用new GeoState { Name = "[^"]+",
- 此处[^"]+
部分是一个负字符类,它将匹配任何不是双引号的字符,因此它将在第一组中正确停止关闭双引号。