Removendo caracteres numéricos do valor alfanumérico no cálculo do campo?

9

Eu tenho um campo que contém valores alfanuméricos no seguinte formato:

A-AA00

Às vezes eles também são

A-AAA0

Eu preciso de um script Python que eu possa colocar na calculadora de campo no ArcMap 10 que remova pelo menos os caracteres numéricos e treine novamente os alfabéticos e o hífen. Então, por exemplo, isso:

A-AA0

torna-se o seguinte:

A-AA

Também quero substituir os caracteres numéricos por caracteres numéricos de outro campo. Essa entrada do Stack Exchange soluciona esse problema, mas a string tem um espaço antes do número e isso pode ser usado para dividir e indexar ... minhas strings não são construídas com tanta facilidade.

ndthl
fonte

Respostas:

17

Eu usaria expressões regulares . Se você colocar o seguinte na seção de blocos de código da calculadora, ele retornará uma string com todos os dígitos removidos, independentemente de serem:

import re
def strip_digits(s):
    return re.sub("\d+", "", s)

Isso pode ser chamado na caixa de cálculo como:

strip_digits(!column_name!)

Se você deseja substituir caracteres, adicione outro argumento à função para os caracteres de substituição e coloque-o no lugar da string vazia.

om_henners
fonte
4

basta usar tira

s="AAAA-000"
print s.strip("0, 1,2,3,etc")
AAAA-
Peludo
fonte
4

Eu também encontrei isso no centro de mapeamento (arcgis.com).
ferramenta de gerenciamento de texto do centro de recursos

É um código antigo escrito para 9.2 / 9.3. Não tenho certeza sobre a adequação para 10.x A descrição diz ...

  1. Localizar e Substituir em Lote: Esta ferramenta preenche cadeias de caracteres em um campo de texto com cadeias de substituição especificadas em uma tabela Localizar / Substituir. Isso é útil para padronizar cadeias de etiquetas ou introduzir e aplicar abreviações padrão.
  2. Converter texto em maiúsculas e minúsculas: Essa ferramenta converte as seqüências de caracteres de texto em um campo (presume-se que todas estejam em maiúsculas ou minúsculas) em uma sequência de texto de maiúsculas e minúsculas (maiúsculas e minúsculas) em outro campo (novo). Essa ferramenta foi criada para lidar com abreviações comuns, como NE para nordeste, para que não saia como Ne.
  3. Extrair números da Hwy para etiquetas de proteção da Hwy: adiciona a parte numérica do nome de uma estrada a outro campo de texto.

Todas essas ferramentas são escritas em Python e podem ser modificadas para atender a quaisquer necessidades específicas que você tiver.

Brad Nesom
fonte
3

Eu começaria com este caso simples:

>>> x = "A-AA00"
>>> print x
A-AA00
>>> print x.replace("0","")
A-AA
>>> 

A partir daí, alguns exemplos de código de bloqueio para Python da Ajuda do ArcGIS 10 devem oferecer uma vantagem inicial para a solução total.

PolyGeo
fonte
11
Acho que o problema é que não há uma maneira fácil de lidar com dígitos que não sejam 0. É por isso que expressões regulares são tão úteis, como om_henners apontou.
Nmpeterson