我几个小时以来一直在抨击我,但我显然缺乏基本的正则表达式知识来做我想做的事。
我有一个WKT(众所周知的文字,见http://en.wikipedia.org/wiki/Well-known_text)字符串,如下所示:
PROJCS["MGI / Austria GK Central",GEOGCS["MGI",DATUM["Militar_Geographische_Institute",SPHEROID["Bessel 1841",6377397.155,299.1528128000009,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6312"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4312"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",13.33333333333333],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",-5000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","31255"]]
我想将此字符串解析为键/值对。所以,作为一个例子:
SPHEROID["Bessel 1841",6377397.155,299.1528128000009,AUTHORITY["EPSG","7004"]]
将成为:
密钥:SPHEROID
值:"Bessel 1841",6377397.155,299.1528128000009,AUTHORITY["EPSG","7004"]
通过匹配\[(.*?)\]
我获得了所有值(请参阅http://rubular.com/r/6SxMbRMufJ),但我丢失了密钥。如何创建一个正则表达式,其中第一个组是键,第二个组是值?
另外,有没有办法分割嵌套值(如key[key[value]]]
),还是必须在每次匹配时使用递归?
答案 0 :(得分:3)
要达到最低要求的正则表达式为([^\[]+?)\[(.*)\]
。
但是,由于您正在解析特定格式,因此您应该寻找那样做的现有解析器。
例如,您可以查看http://www.dupuis.me/node/28
中的代码此外,http://gis.stackexchange.com的答案提到了其他图书馆:https://gis.stackexchange.com/questions/13078/how-to-unproject-wkt-to-wkt-in-net