【问题标题】:return characters between two underscores返回两个下划线之间的字符
【发布时间】:2014-03-26 23:01:59
【问题描述】:

我想提取两个下划线之间的字符串。 '_' 之间和两侧的字符数会有所不同,但只会有两个下划线。带下划线的长字段为文本字段,要填写的字段为短整数。我已经能够解析出下划线前后的字符并填充要素类中的其他字段,但无法将中间部分放入新字段中。

示例 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)仍然是空的。

谢谢 -al

【问题讨论】:

    标签: string python-2.7 substring arcpy arcmap


    【解决方案1】:
        print "my_test_string".split('_')[1]
    

    将输出“测试”

    【讨论】:

    • 这是对我的问题的最简单的答案,并且有效。谢谢@ksun!
    • fyi,这实际上不会返回两个下划线之间的字符,而是一个下划线之后的每个字符(这是 OP 想要的,但不是问题标题的答案)
    【解决方案2】:

    我相信你想要一个正则表达式

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

    但是等等,我们可以做得更好!下面的 regex 使用 'look(ahead|behind)s' 舍弃下划线,从而为您留下重要的内容:(?<=_).+(?=_)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多