Supprimer les caractères numériques de la valeur alphanumérique dans le calcul du champ?

9

J'ai un champ contenant des valeurs alphanumériques au format suivant:

A-AA00

Parfois, ils sont aussi

A-AAA0

J'ai besoin d'un script Python que je peux mettre dans la calculatrice de champ dans ArcMap 10 qui supprimera au moins les caractères numériques et recyclera les caractères alphabétiques et le tiret. Ainsi, par exemple, ceci:

A-AA0

devient ceci:

A-AA

Je veux également remplacer les caractères numériques par des caractères numériques d'un autre champ. Cette entrée Stack Exchange résout ce problème, mais la chaîne a un espace avant le numéro et cela peut être utilisé pour le fractionnement et l'indexation ... mes chaînes ne sont pas si bien construites.

ndthl
la source

Réponses:

17

J'utiliserais des expressions régulières . Si vous mettez ce qui suit dans la section de bloc de code de la calculatrice, il retournera une chaîne qui a tous les chiffres supprimés, qu'ils soient:

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

Cela peut ensuite être appelé depuis la boîte de calcul comme:

strip_digits(!column_name!)

Si vous souhaitez remplacer des caractères, ajoutez un autre argument à la fonction pour les caractères de remplacement et placez-le à la place de la chaîne vide.

om_henners
la source
4

il suffit d'utiliser la bande

s="AAAA-000"
print s.strip("0, 1,2,3,etc")
AAAA-
Poilu
la source
4

J'ai également trouvé cela dans le centre de cartographie (arcgis.com).
outil de gestion de texte du centre de ressources

Il s'agit d'un ancien code écrit pour 9.2 / 9.3. Pas sûr de la pertinence de 10.x La description se lit comme suit ...

  1. Recherche et remplacement par lots: cet outil remplit les chaînes d'un champ de texte avec des chaînes de remplacement spécifiées dans un tableau Rechercher / Remplacer. Cela est utile pour normaliser les chaînes d'étiquettes ou pour introduire et appliquer des abréviations standard.
  2. Convertir le texte en casse appropriée: cet outil convertit les chaînes de texte d'un champ (présumé être entièrement en majuscules ou en minuscules) en une chaîne de texte en casse correcte (majuscules et minuscules mixtes) dans un autre (nouveau) champ. Cet outil est écrit pour gérer les abréviations courantes telles que NE pour le nord-est, de sorte qu'il ne sortira pas comme Ne.
  3. Extraire les numéros de route pour les étiquettes de bouclier de route: ajoute la partie numérique d'un nom de route à un autre champ de texte.

Tous ces outils sont écrits en Python et peuvent être modifiés pour répondre à vos besoins spécifiques.

Brad Nesom
la source
3

Je commencerais par ce cas simple:

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

À partir de là, certains des exemples de bloc de code pour Python de l'aide d'ArcGIS 10 devraient vous donner une longueur d'avance pour la solution totale.

PolyGeo
la source
1
Je pense que le problème avec cela est qu'il n'y a pas de moyen facile de gérer les chiffres non 0. C'est pourquoi les expressions régulières sont si utiles, comme l'a souligné om_henners.
nmpeterson