Menghapus karakter numerik dari nilai alfanumerik dalam perhitungan bidang?

9

Saya memiliki bidang yang berisi nilai alfanumerik dalam format berikut:

A-AA00

Terkadang mereka juga begitu

A-AAA0

Saya membutuhkan skrip Python yang bisa saya masukkan ke dalam kalkulator lapangan di ArcMap 10 yang setidaknya akan menghapus karakter numerik, dan melatih ulang yang alfabet dan tanda hubung. Jadi, misalnya, ini:

A-AA0

menjadi ini:

A-AA

Saya juga ingin mengganti karakter numerik dengan karakter numerik dari bidang lain. Entri Stack Exchange ini membahas masalah ini, tetapi string memiliki ruang sebelum nomor dan ini dapat digunakan untuk memisahkan dan mengindeks ... string saya tidak begitu mudah dibangun.

ndthl
sumber

Jawaban:

17

Saya akan menggunakan ekspresi reguler . Jika Anda memasukkan yang berikut ini di bagian blok kode kalkulator itu akan mengembalikan string yang memiliki semua digit dilucuti, tidak peduli mereka adalah:

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

Ini kemudian dapat dipanggil dari kotak hitung sebagai:

strip_digits(!column_name!)

Jika Anda ingin mengganti karakter, tambahkan argumen lain ke fungsi untuk karakter pengganti, dan letakkan di tempat string kosong.

om_henners
sumber
4

cukup gunakan strip

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

Saya juga menemukan ini di pusat pemetaan (arcgis.com).
alat manajemen teks pusat sumber daya

Ini adalah kode lama yang ditulis untuk 9.2 / 9.3. Tidak yakin tentang kesesuaian untuk 10.x Deskripsi berbunyi ...

  1. Batch Find and Replace: Alat ini mengisi string dalam bidang teks dengan string pengganti yang ditentukan dalam tabel Temukan / Ganti. Ini berguna untuk menstandarisasi string label atau memperkenalkan dan menegakkan singkatan standar.
  2. Konversi Teks menjadi Kasus yang Tepat: Alat ini mengubah string teks dalam satu bidang (dianggap semua huruf besar atau kecil) menjadi string teks kasus yang tepat (campuran huruf besar dan kecil) di bidang lain (baru). Alat ini ditulis untuk menangani singkatan umum seperti NE untuk timur laut, sehingga tidak akan keluar sebagai Ne.
  3. Ekstrak Bilangan Hwy untuk Label Perisai Hwy: Menambahkan bagian numerik nama jalan raya ke bidang teks lain.

Semua alat ini ditulis dalam Python dan dapat dimodifikasi untuk memenuhi kebutuhan spesifik apa pun yang Anda miliki.

Brad Nesom
sumber
3

Saya akan mulai dengan kasus sederhana ini:

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

Dari sana beberapa contoh kode kunci untuk Python dari Bantuan ArcGIS 10 harus memberi Anda langkah awal untuk solusi total.

PolyGeo
sumber
1
Saya pikir masalah dengan ini adalah tidak ada cara mudah untuk menangani non-0 digit. Itu sebabnya ekspresi reguler sangat berguna, seperti yang ditunjukkan om_henners.
nmpeterson