Eu tenho uma string que tem coordenadas.
- As coordenadas individuais são separadas por espaços.
- Os vértices (coordenadas XYZ) são separados por vírgulas.
- Os grupos de vértices são colocados entre colchetes e separados por vírgulas.
Before: MULTILINESTRING M (( 0.0 5.0 123, 10.0 10.0 456, 30.0 0.0 789),( 50.0 10.0 -123, 60.0 10.0 -100000.0))
Eu quero substituir a terceira coordenada em cada vértice por um novo número:
After: MULTILINESTRING M (( 0.0 5.0 1, 10.0 10.0 1, 30.0 0.0 1),( 50.0 10.0 1, 60.0 10.0 1))
Para simplificar, podemos usar o número 1
como o número de substituição.
Qual é uma boa maneira de substituir esses números nessa string?
Se a estrutura dos vértices e grupos de vértices for uniforme, e o objetivo for de fato substituir todas as terceiras coordenadas pelo mesmo número literal, isso pode ser feito com um
regexp_replace
.Presumindo que os números estão todos usando caracteres decimais, aqui está um exemplo com o texto que você forneceu:
Resultado:
MULTILINESTRING M (( 0.0 5.0 1, 10.0 10.0 1, 30.0 0.0 1),( 50.0 10.0 1, 60.0 10.0 1))
O acima corresponderá a qualquer número decimal comum precedido por um espaço e precedendo uma vírgula ou parênteses de fechamento e o substituirá por
1
.Se a substituição precisar ser derivada da coordenada capturada, pode valer a pena considerar extrair as coordenadas e manipulá-las antes de reconstruir a string, dependendo da natureza da derivação.