मुझे यह सटीक समस्या थी और इसे रेगेक्स के साथ अजगर कंसोल से हल किया। जबकि रेगेक्स मुश्किल हो सकता है यह बहुत शक्तिशाली है। और आपको एक उपकरण के साथ छोड़ दिया जाएगा जिसका उपयोग आप अधिक कठिन मैच मामलों के साथ कर सकते हैं।
यहाँ डॉक्स हैं । और यहाँ अपने regex तार के परीक्षण के लिए एक अच्छा ऑनलाइन मशीन है ।
सबसे पहले यहाँ क्विज़ में अपने रेगेक्स स्ट्रिंग्स की जाँच के लिए मैं त्वरित स्क्रिप्ट चलाता हूं
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"
एक बार जब आप अपने रेगेक्स मिलान से खुश हो जाते हैं, तो आप इसे फ़ंक्शन में लपेट सकते हैं जो सभी सुविधाओं के लिए एक चयन प्रदान करता है। नीचे ऐसा करने के लिए एक फ़ंक्शन है।
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)
आपको इसे एक फ़ाइल में सहेजने और इसे qgis python ide से चलाने की आवश्यकता होगी।
(अप्रमाणित लेकिन बहुत आश्वस्त)