¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?
Hola,
Soy nuevo en expresiones regulares, necesito extraer el nombre de los usuarios de su identificación, por ejemplo:
Tengo la siguiente cadena larga
123450_dan; 154396_kelli; 198756_dev;
El resultado debe ser: dan
¿Qué expresión regular necesito usar para extraer el nombre dan que tiene la identificación 123450?
Gracias de antemano.
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Gracias, funciona perfecto!!
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Gracias, funciona perfecto.
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Utilice este formulario en su lugar:
name = Regex( string, "123450_([a-zA-Z ]+);", "\1" );
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?El script que proporcioné anteriormente usando funciones JMP no requeriría ninguna modificación.La expresión regular para capturar uno o más "nombres" después del guión bajo sería (\w+\s*)+ lo que significa acumular ( ) al menos una palabra \w+ , cero o más espacios \s* y el signo más implica repetir el patrón una o más veces.
Names Default to Here(1);
string="123450_dan fox; 154396_kelli ann marie; 198756_dev;";
name1 = Regex( string, "123450_((\w+\s*)+\b)", "\1" );
name2 = Regex( string, "154396_((\w+\s*)+\b)", "\1" );
Show( name1, name2 ); <BR />/*: name1 = "dan fox"; name2 = "kelli ann marie"; */
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Hola, Mark,
Sólo 1 pregunta, ¿qué necesito agregar si tengo espacio en el nombre de usuario?
por ejemplo: "123450_dan fox; 154396_kelli; 198756_dev;"
Probé la siguiente expresión regular:
string="123450_dan fox; 154396_kelli; 198756_dev;"
nombre = Regex( cadena, "123450_(\w+ | \s+)", "\1" );
Mostrar nombre );
Resultado: "dan" en lugar de "dan fox"
Gracias de antemano.
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Solo por diversión, y debido a que las expresiones regulares pueden ser difíciles de leer para otros (o dos semanas después), aquí hay una alternativa que utiliza funciones JMP.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
//create a list of id_name
id = Words(string, ";");
//create a list if ids, a list if names, an associative array(keyed list)
idlist={};
namelist={};
lookup = [=>""]; //Associative Array that retuns an empty string, if number is not valid
for(i=1, i<=nitems(id), i++,
InsertInto(idlist, num(word(1,Trim(id[i]),"_")) );
InsertInto(namelist, Titlecase(word(2,Trim(id[i]),"_")) ); //don't need TitleCase
lookup[idlist[i]]=namelist[i] //ids are the keys and names are the values
);
show(id, idlist, namelist, lookup, lookup[198756], lookup[128954]); //last one is not valid
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Gracias Marcos,
Funcionando perfecto!!Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?Suponiendo que desea asociar el nombre con una identificación específica en el componente "id_name;", entonces esta versión también funcionará.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// target ID
id = "123450";
// assume specific ID
name = Regex( string, id || "_(\w+);", "\1" );
Show( name );
Re: ¿Cómo extraer una cadena entre un patrón específico usando expresiones regulares?No especificaste muchos detalles sobre el ID, así que aquí tienes algunos ejemplos para empezar. Utilicé un script JMP, pero esta extracción también podría usarse en una fórmula de columna.
Names Default to Here( 1 );
// test string
string = "123450_dan; 154396_kelli; 198756_dev;";
// assume specific ID
name = Regex( string, "123450_(\w+\b)", "\1" );
Show( name );
// assume first ID with 6 numbers
name = Regex( string, "\d{6}_(\w+\b)", "\1" );
Show( name );
// assume first ID with any number of numbers
name = Regex( string, "\d+_(\w+\b)", "\1" );
Show( name );