Saya punya masalah persis ini dan menyelesaikannya dari konsol python dengan regex. Meskipun regex bisa rumit, sangat kuat. Dan Anda akan dibiarkan dengan alat yang dapat Anda gunakan dengan kasing yang lebih sulit.
Ini dokumennya . dan di sini adalah mesin online yang bagus untuk menguji string regex Anda.
Pertama di sini adalah skrip cepat yang saya jalankan untuk memeriksa string regex saya di 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"
Setelah Anda puas dengan pencocokan regex Anda, Anda bisa membungkusnya dalam suatu fungsi untuk menyediakan pilihan untuk semua fitur yang cocok. Di bawah ini adalah fungsi untuk melakukan hal itu.
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)
Anda harus menyimpan ini ke dalam file dan menjalankannya dari ide python qgis.
(Belum diuji tetapi cukup percaya diri)