J'ai eu ce problème exact et l'ai résolu à partir de la console python avec regex. Bien que l'expression régulière puisse être délicate, elle est très puissante. Et vous vous retrouverez avec un outil que vous pouvez utiliser avec des cas de match plus difficiles.
Voici les documents . et voici une belle machine en ligne pour tester vos chaînes d'expression régulière.
Tout d'abord, voici le script rapide que j'exécute pour vérifier mes chaînes d'expression régulière dans 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"
Une fois que vous êtes satisfait de votre correspondance regex, vous pouvez l'intégrer dans une fonction pour fournir une sélection de toutes les fonctionnalités qui correspondent. Voici une fonction pour faire exactement cela.
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)
Vous devrez l'enregistrer dans un fichier et l'exécuter à partir de l'ide python qgis.
(non testé mais assez confiant)