Tôi đã có vấn đề chính xác này và giải quyết nó từ bảng điều khiển python bằng regex. Trong khi regex có thể khó, nó rất mạnh. Và bạn sẽ được để lại một công cụ bạn có thể sử dụng với các trường hợp khớp khó hơn.
Dưới đây là các tài liệu . và đây là một máy trực tuyến tốt để kiểm tra chuỗi regex của bạn.
Đầu tiên ở đây là tập lệnh nhanh tôi chạy để kiểm tra chuỗi regex của tôi trong qgis
import re
RES_STRING='MINERAL CLAIM'
REGEX_HAYSTACK='DISTRICT LOT 5639, BEING AWARD NO. 2 MINERAL CLAIM, KDYD'
REGEX_STRING=re.compile(RES_STRING)
print "searching for "+RES_STRING+" in "+REGEX_HAYSTACK
REGEX_MATCH = REGEX_STRING.search(REGEX_HAYSTACK)
if REGEX_MATCH:
print "found '"+REGEX_MATCH.group()+"'"
else:
print "No match found"
Khi bạn hài lòng với kết hợp regex của mình, bạn có thể kết hợp nó trong một hàm để cung cấp lựa chọn cho tất cả các tính năng phù hợp. Dưới đây là một chức năng để làm điều đó.
def select_by_regex(input_layer,attribute_name,regex_string):
import re
RES_STRING=regex_string
attribute_name_idx = input_layer.fieldNameIndex(attribute_name)
if attribute_name_idx<0:
raise valueError("cannot find attribute"+attribute_name)
else:
fids=[]
for feature in input_layer.getFeatures():
REGEX_HAYSTACK=feature[attribute_name_idx]
REGEX_STRING=re.compile(RES_STRING)
REGEX_MATCH = REGEX_STRING.search(REGEX_HAYSTACK)
if REGEX_MATCH:
fids.append(feature.id())
else:
pass
input_layer.setSelectedFeatures(fids)
#USAGE BIT
input_layer = QgsVectorLayer('path/to/shape/file.shp','layer name', 'ogr')
QgsMapLayerRegistry.instance().addMapLayer(input_layer)
regex_string='MINERAL CLAIM'
attribute_name='TITLE'
select_by_regex(input_layer,attribute_name,regex_string)
Bạn sẽ cần lưu tệp này vào một tệp và chạy nó từ ide python của qgis.
(chưa được kiểm tra nhưng khá tự tin)