11 votos

¿Extrayendo una parte de una cadena de un campo en el Calculador de Campos de QGIS?

Quiero crear un nuevo campo en mi tabla de atributos. Mi objetivo: devolver todos los dígitos entre los caracteres / y _ del campo llamado "location" aplicando la siguiente expresión:

regexp_substr( "Texto", '/(\\d*)\_' )

basado en este ejemplo funcionando: ¿Cómo obtener una parte específica de una cadena de un campo en la tabla de atributos de QGIS?

Sin embargo, la expresión no da el resultado deseado en mi caso:

introduzca aquí la descripción de la imagen

¿Alguien sabe alguna manera de modificar/adaptar la expresión?

0 votos

¿Funciona cuando reemplazas el * con un +? Realmente no entiendo la sintaxis tampoco. Alternativamente podrías ejecutar un substr, ya que tu ruta y longitud de expresión siempre es la misma.

18voto

Sushant23 Puntos 329

Dado que el número de caracteres es el mismo, puedes usar la función substr() en un nuevo campo como en la siguiente expresión:

substr( "Location" ,17,6)

enter image description here

En el ejemplo anterior, utilicé Path en lugar de Location

0 votos

¡Gracias por responder con este ejemplo! ¡Funciona perfectamente :) Thxthxthx

2 votos

Por favor, acepta la respuesta si te ayudó a resolver tu problema.

8voto

user58859 Puntos 211

Un par de problemas - primero, no necesitas escapar (es decir, poner una barra invertida antes) el guion bajo. Tu patrón también sugiere que los dígitos siguen inmediatamente después de una barra diagonal - lo cual no es así, hay una w entre ellos en cada uno de tus ejemplos. Si esto es consistentemente una w, podrías hacer lo siguiente:

regexp_substr( "location", '/w(\\d*)_' )

pero en realidad, si sólo estás tratando de obtener cada número antes del guion bajo, sería suficiente con:

regexp_substr( "location", '(\\d*)_' )

Como se puede ver aquí:

introducir descripción de la imagen aquí

0 votos

¿Cómo puedo obtener todos los caracteres después del guion bajo? Intenté regexp_substr( "location", '_(\\d*)' ) pero no funcionó.

0 votos

Parece que encontré uno usando regexp_substr( "ubicación", '(\\d)_' ) Gracias

1 votos

Gracias, eso es genial. También puedes especificar la longitud de los dígitos con {5} en lugar de *

0voto

jpkc Puntos 31
substr("ubicación",16,(length("ubicación")-1))

o

substr(substr("ubicación",17,14),1,6)

que devolverá "W48535"

0 votos

Bienvenido a GIS.SE. Por favor, añada algo de información sobre por qué esta solución es preferible a las proporcionadas anteriormente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X