回答:
LIKE
演算子を使用する必要があります。
例えば、
"TITLE" LIKE '%MINERAL CLAIM%'
%
シンボルは、ワイルドカードのように動作します。
LIKE
大文字と小文字が区別されますが、区別されILIKE
ません。
私はこの正確な問題を抱えており、Pythonコンソールから正規表現で解決しました。正規表現は難しい場合がありますが、非常に強力です。そして、より難しいマッチケースで使用できるツールが残されます。 こちらがドキュメントです。また、正規表現文字列をテストするための素晴らしいオンラインマシンがあります。
まず、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"
正規表現の一致に満足したら、それを関数でラップして、一致するすべての機能の選択を提供できます。以下は、まさにそれを行う関数です。
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から実行する必要があります。
(テストされていないが、かなり自信がある)