การลบอักขระที่เป็นตัวเลขจากค่าตัวอักษรและตัวเลขในการคำนวณฟิลด์?


9

ฉันมีฟิลด์ที่มีค่าตัวอักษรและตัวเลขในรูปแบบต่อไปนี้:

A-AA00

บางครั้งพวกเขาก็ยัง

A-AAA0

ฉันต้องการสคริปต์ Python ที่ฉันสามารถใส่ลงในเครื่องคำนวณภาคสนามใน ArcMap 10 ซึ่งอย่างน้อยก็จะลบอักขระที่เป็นตัวเลขออกและฝึกเรียงตัวอักษรและยัติภังค์ใหม่ ตัวอย่างเช่นนี้:

A-AA0

กลายเป็นสิ่งนี้:

A-AA

ฉันต้องการแทนที่ตัวอักษรตัวเลขด้วยตัวอักษรตัวเลขจากฟิลด์อื่น รายการแลกเปลี่ยน Stackนี้แก้ไขปัญหานี้ แต่สตริงมีช่องว่างก่อนหมายเลขและสามารถใช้สำหรับการแยกและการทำดัชนี ... สตริงของฉันไม่ได้ถูกสร้างขึ้นอย่างคล่องแคล่ว

คำตอบ:


17

ผมจะใช้การแสดงออกปกติ หากคุณใส่สิ่งต่อไปนี้ลงในส่วนบล็อคโค้ดของเครื่องคิดเลขมันจะคืนค่าสตริงที่มีตัวเลขทั้งหมดที่ลอกออกไม่ว่าจะเป็น:

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

ซึ่งสามารถเรียกใช้จากกล่องคำนวณดังนี้

strip_digits(!column_name!)

หากคุณต้องการแทนที่อักขระให้เพิ่มอาร์กิวเมนต์อื่นลงในฟังก์ชันสำหรับอักขระทดแทนแล้วใส่แทนสตริงว่าง



4

ฉันพบสิ่งนี้ในศูนย์การทำแผนที่ (arcgis.com)
เครื่องมือการจัดการข้อความของศูนย์ทรัพยากร

มันเป็นรหัสเก่าที่เขียนขึ้นสำหรับ 9.2 / 9.3 ไม่แน่ใจเกี่ยวกับความเหมาะสมสำหรับ 10.x คำอธิบายอ่าน ...

  1. Batch Find and Replace: เครื่องมือนี้เติมสตริงในฟิลด์ข้อความที่มีสตริงการแทนที่ที่ระบุในตารางค้นหา / แทนที่ สิ่งนี้มีประโยชน์สำหรับการกำหนดมาตรฐานสตริงป้ายกำกับหรือแนะนำและบังคับใช้ตัวย่อมาตรฐาน
  2. แปลงข้อความเป็นตัวพิมพ์เล็ก: เครื่องมือนี้แปลงสตริงข้อความในหนึ่งฟิลด์ (สันนิษฐานว่าเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทั้งหมด) เป็นตัวพิมพ์เล็ก (ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) ในข้อความอื่น (ใหม่) เครื่องมือนี้เขียนขึ้นเพื่อจัดการตัวย่อทั่วไปเช่น NE สำหรับภาคตะวันออกเฉียงเหนือเพื่อไม่ให้ออกมาเหมือน Ne
  3. แยกหมายเลข Hwy สำหรับฉลากโล่ Hwy: เพิ่มส่วนที่เป็นตัวเลขของชื่อทางหลวงไปยังช่องข้อความอื่น

เครื่องมือทั้งหมดเหล่านี้เขียนด้วย Python และสามารถปรับเปลี่ยนเพื่อให้บรรลุความต้องการเฉพาะที่คุณมี


3

ฉันจะเริ่มต้นด้วยกรณีง่ายๆนี้:

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

จากนั้นตัวอย่าง codeblock สำหรับ Python จากวิธีใช้ ArcGIS 10ควรให้ความรู้เบื้องต้นแก่คุณในการแก้ปัญหาทั้งหมด


1
ฉันคิดว่าปัญหาของเรื่องนี้คือไม่มีวิธีง่ายๆในการจัดการกับตัวเลขที่ไม่ใช่ 0 นั่นเป็นสาเหตุที่นิพจน์ทั่วไปนั้นมีประโยชน์มากดังที่ om_henners ชี้ให้เห็น
nmpeterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.