답변:
당신은 LIKE
연산자를 사용해야합니다 .
예를 들어
"TITLE" LIKE '%MINERAL CLAIM%'
이 %
기호는 와일드 카드처럼 작동합니다.
LIKE
대소 문자를 구분하지만 ILIKE
그렇지 않습니다.
나는이 정확한 문제가 있었고 정규식을 사용하여 파이썬 콘솔에서 해결했습니다. 정규식은 까다로울 수 있지만 매우 강력합니다. 그리고 더 어려운 성냥 케이스에 사용할 수있는 도구가 남게됩니다. 여기 문서가 있습니다. 그리고 여기에 좋은 온라인 기계 정규식 문자열을 테스트.
첫 번째는 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에서 실행해야합니다.
(예상하지만 자신감이 있음)