这不是一种非常有效的方法,而是我之前使用过的方法。确保Field2
和Field3
存在,那么使用类似如下:
from qgis.core import *
from qgis.gui import *
import re
@qgsfunction(args='auto', group='Custom')
def func(field, feature, parent):
# Get active layer
layer = qgis.utils.iface.activeLayer()
# Get field indices
idx_2 = layer.fieldNameIndex('Field2')
idx_3 = layer.fieldNameIndex('Field3')
# Extract string values
first_value = [w for w in re.split('\W', field) if w][0]
second_value = [w for w in re.split('\W', field) if w][1]
third_value = [w for w in re.split('\W', field) if w][2]
# Update values in fields
layer.changeAttributeValue(feature.id(), idx_2, second_value)
layer.changeAttributeValue(feature.id(), idx_3, third_value)
return first_value
范例:
这是一个属性:
然后,在脚本保存后,选择更新Field1
并使用以下表达式:
func("Field1")
结果: