إرجاع الأحرف بين الشرطة السفلية
-
20-12-2019 - |
سؤال
أرغب في استخراج سلسلة من الأحرف بين الشرطة السفلية.سيختلف عدد الأحرف بين وعلى كل جانب من "_"، ولكن لن يكون هناك سوى شرطتين سفليتين.الحقل الطويل الذي يحتوي على الشرطة السفلية هو حقل نصي، والحقل المطلوب ملؤه هو عدد صحيح قصير.لقد تمكنت من تحليل الأحرف قبل وبعد الشرطات السفلية وملء الحقول الأخرى في فئة الميزة، ولكن لم أتمكن من وضع القسم الأوسط في حقل جديد.
مثال 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) لا يزال فارغًا.
شكرا
المحلول
سوف إخراج "اختبار"
نصائح أخرى
أعتقد أنك تريد أ regex:
import re
m = re.search('_.+_', 'goodbye_cruel_world')
m.group(0) # returns '_cruel_'
ولكن مهلا، يمكننا أن نفعل ما هو أفضل!الأتى regex الاستخدامات 'look(ahead|behind)s'
لتجاهل الشرطات السفلية، وبذلك نترك لك ما هو مهم: (?<=_).+(?=_)