使用正则表达式修改目标字符串遇问题,寻求解决方案
正则表达式替换解决方案
问题分析
你需要移除的内容包括:开头空白字符、)))","0"、换行符(vbCrLf)以及"MULTIPOLYGON ((,之前失败大概率是因为正则中未转义括号(括号在正则里属于特殊元字符,需用\(/\)转义),或者未处理换行符的匹配。
分步替换方案
- 第一步:替换核心冗余内容
匹配正则:\s*)))","0"\s*"MULTIPOLYGON \(\(
替换为:),(
解释:\s*匹配任意空白(包括换行、空格),转义后的\(/\)匹配字符串里的括号 - 第二步:移除开头剩余空白
匹配正则:^\s+
替换为:空字符串
一步到位正则
直接用这个正则完成所有替换:
^\s*(.*?)))))","0"\s*"MULTIPOLYGON \(\((.*)
替换为:$1),($2
解释:(.*?)捕获第一个数字部分,(.*)捕获最后的坐标部分,用),(连接两个捕获组,同时自动去掉开头空白和中间冗余内容。
代码示例(VBA)
Dim originalStr As String, resultStr As String originalStr = " 753108944)))"",""0"" " & vbCrLf & """MULTIPOLYGON (((""-7.7885889" ' 分步替换 resultStr = Replace(originalStr, ")))""","""0"" " & vbCrLf & """MULTIPOLYGON ((", "),(") resultStr = LTrim(resultStr) ' 移除开头空格 Debug.Print resultStr ' 输出:753108944),(-7.7885889
代码示例(Python)
import re original_str = ''' 753108944)))","0" "MULTIPOLYGON (((-7.7885889''' result = re.sub(r'^\s*(.*?)))))","0"\s*"MULTIPOLYGON \(\((.*)', r'\1),(\2', original_str) print(result)
内容的提问来源于stack exchange,提问作者Terry Lee
相关产品推荐
相关产品推荐

