سؤال

أرغب في استخراج سلسلة من الأحرف بين الشرطة السفلية.سيختلف عدد الأحرف بين وعلى كل جانب من "_"، ولكن لن يكون هناك سوى شرطتين سفليتين.الحقل الطويل الذي يحتوي على الشرطة السفلية هو حقل نصي، والحقل المطلوب ملؤه هو عدد صحيح قصير.لقد تمكنت من تحليل الأحرف قبل وبعد الشرطات السفلية وملء الحقول الأخرى في فئة الميزة، ولكن لم أتمكن من وضع القسم الأوسط في حقل جديد.

مثال 1:102_1204_234324

أريد إرجاع "1204"

مثال 2:324423_1_342

أريد العودة "1"

لقد جربت عددًا من الأشكال المختلفة والتي أعتقد أنها يجب أن تنجح هي:

# Import system modules
import arcpy
#from arcpy import env

# Set environment settings
arcpy.env.workspace = "c:/temp/testing.gdb"

# Set local variables
inFeatures = "testFeature"
fieldName = "testField"
expression = "!parse_field!.split('_')[1::2]"

# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON", "")

والذي أعتقد أنه سيؤدي إلى إنشاء قائمة، ثم إرجاع كل عنصر ثانٍ من القائمة.ومع ذلك، فإن الحقل المطلوب ملؤه (testField) لا يزال فارغًا.

شكرا

هل كانت مفيدة؟

المحلول

giveacodicetagpre.

سوف إخراج "اختبار"

نصائح أخرى

أعتقد أنك تريد أ regex:

import re
m = re.search('_.+_', 'goodbye_cruel_world')
m.group(0) # returns '_cruel_'

ولكن مهلا، يمكننا أن نفعل ما هو أفضل!الأتى regex الاستخدامات 'look(ahead|behind)s' لتجاهل الشرطات السفلية، وبذلك نترك لك ما هو مهم: (?<=_).+(?=_)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top