আমার এই সঠিক সমস্যাটি ছিল এবং রেজেক্সের সাথে পাইথন কনসোল থেকে এটি সমাধান করেছিলাম। যদিও রেজেক্সটি খুব শক্তিশালী হতে পারে। এবং আপনি এমন একটি সরঞ্জাম রেখে গেছেন যা আপনি আরও কঠিন ম্যাচের ক্ষেত্রে ব্যবহার করতে পারেন।
এখানে ডক্স রয়েছে । এবং এখানে আপনার রেগেক্স স্ট্রিং পরীক্ষা করার জন্য একটি দুর্দান্ত অনলাইন মেশিন ।
প্রথমত এখানে দ্রুত স্ক্রিপ্ট আমি কিগিসে আমার রেজেক্স স্ট্রিংগুলি পরীক্ষা করতে চালাচ্ছি
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 পাইথন আদর্শ থেকে চালানো উচিত।
(অপরিশোধিত তবে বেশ আত্মবিশ্বাসী)