Como encontrar e alterar um padrão, sem substituir os demais elementos de uma String, com regex?

Meu problema é o seguinte,

possuo um template “qualquer nome:{{UDA_numero qualquer}}” que vem “solto” em uma String. Nesse String, pode existir “n” templates, palavras, números, etc.

O objetivo é pegar esse “numero qualquer” do template e processar ele em uma serie de operações para substituir por uma descrição que correspondente ao numero. Ainda, seria necessário ignorar todo o restante dos elementos da String e substituir somente o template, mantendo todos os outros caracteres inalterados.

Ex:

 String: "  abc teste:{{UDA_1}}, teste2:{{UDA_2}} \n teste3:{UDA_3} "   String(processada): "  abc teste:descriacao_1, teste2:descricao_2 \n teste3:{UDA_3} " 

Do jeito que eu estava tentando atualmente, era utilizando regex com a seguinte ideia:

         // Padrão para acessar somente os templates          Pattern p = Pattern.compile("(\{\{(.\w+.\w.)\}})+",Pattern.DOTALL);          // String recebida          Matcher m = p.matcher(ImportDescriptionValue);                           // Sempre que encontrar o valor correspondente          while (m.find()) {               // Pega somente a parte de dentro (ex: UDA_1)                         String uda = m.group(2);                  // Formatar String para pegar somente o id              String idUDA = uda.substring(uda.indexOf('_')+1);               // **                    ... operações com o ID                  if(encontrou descrição correspondente)                   // Altera o atual pela descrição                   m.replaceFirst(description);                         }                     else {                   //Replace por "vazio" quando não encontrar.                       m.replaceFirst("");              }          }               // String processada.       System.out.printl(m); 

O código está errado, mas a ideia seria mais ou menos essa. Eu possuo uma solução que consegue resolver substituir direitinho através do split(), mas decorrente da “criatividade do usuário” ela é bem limitada. Por isso estava tentando utilizar outras aproximações para o problema, como o regex por exemplo.

Minha pergunta:

  • Regex é uma boa forma de lidar com esse problema?
  • Existe alguma forma boa/otimizada de resolver esse problema?

appendChild() esta criando elementos infinitos ao invés de substituir

appendChild() esta criando elementos infinitos toda vez que uma function é executada, ele deveria substituir o elemento sempre que a função fosse executada, alguém sabe me dizer onde estou errando?

Código:


function verificar() { var nas=window.document.getElementById(“tano”) var data= new Date() var ano_atual=Number(data.getUTCFullYear()) var ano_nas=Number(nas.value) var msg=window.document.getElementById(“p_img”) var res=window.document.getElementById(“div_imagem”)

if(nas.value.length == 0 || nas.value> ano_atual){     window.alert("Esta data não é valida.\nVerifique a data e tente novamente!") }else{     var sexo=window.document.getElementsByName("sexo")     var idade= ano_atual-ano_nas     var genero = ""     var img=document.createElement("img")     img.setAttribute("id", "imagem")     if(sexo[0].checked){         if(idade<=10){             img.setAttribute("src","menino_jovem.png")             genero= "menino"         }else if(idade<=18){             img.setAttribute("src", "menino_adolescente.png")             genero= "garoto"         }else if(idade<=40){             img.setAttribute("src","homem_adulto.png")             genero= "homem"         }else if(idade<=60){             img.setAttribute("src", "homem_meia_idade.png")             genero= "homem"         }       }      if(sexo[1].checked){         if(idade<=10){             img.setAttribute("src","menina_jovem.png")             genero= "menina"         }else if(idade<=18){             img.setAttribute("src", "menina_adolescente.png")             genero= "garota"         }else if(idade<=40){             img.setAttribute("src","mulher_adulto.png")             genero= "mulher"         }else if(idade<=60){             img.setAttribute("src", "melher_meia_idade.png")             genero= "mulher"         }     }   } msg.innerHTML=`Verificamos um(a) $  {genero} de $  {idade} anos.` res.appendChild(img) 

}


¿Existe alguna razón por la que una columna de tipo ‘object’ NO tenga elementos str en pandas?

Cargo un dataset en concreto.

Miro los tipos de las columnas

df.dtypes 

Y obtengo:

varA        float64 varB         object varC         object varD         object varE         object varF          int64 varG         object varH          int64 varI        float64 varJ          int64 varK          int64 varL          int64 target       object 

Mi interés está en la varB. Al realizar las siguientes operaciones con

uniques = df['varB'].unique() strUniqueObj = [_ for _ in uniques if type(_) == str] if np.nan in uniques:     uniques_no_NaN.remove(np.nan)     nan = True uniques_no_NaN 

obtengo una lista vacía:

[] 

Como puedo distribuir los elementos de un arreglo principal a otros 2 arreglos lo mas balanceada posible

Tengo un conjunto de 2N jugadores cada uno de los cuales tiene asociados un indicador numérico mayor que cero que define la calidad como jugador. A partir de este conjunto de jugadores, debo crear dos equipos de N jugadores, A y B, tales que la suma de los indicadores de calidad de sus componentes sea lo más similar posible.

Tengo esto preparado

import java.util.Arrays;  class Main {   public static void main(String[] args) {     //Arreglo de jugadores         int[] equipoDeJuego = {8,8,9,6,1,7,1,3,7,5};          int fuerzaA=0;         int fuerzaB=0;          //Equipo A         int[] A=new int[10];          //Equipo A         int[] B= new int[10];          //Se imprime la cantidad de los jugadores         //System.out.println("Cantidad de jugadores: "+equipoDeJuego.length);          //Ordenamos el arreglo de manera creciente         Arrays.sort(equipoDeJuego);            for(int i=0; i<(equipoDeJuego.length)/2; i++) {              //Integrantes del primer arreglo             A[i]=equipoDeJuego[i];             System.out.print("Equipo A:"+A[i]+" ");              fuerzaA+=A[i];         }         System.out.println("Fuerza equipo A: "+fuerzaA);         System.out.println();         for(int i=5; i<10; i++) {              //Integrantes del segundo arreglo             B[i]=equipoDeJuego[i];             System.out.print("Equipo B:"+B[i]+" ");             fuerzaB+=B[i];          }         System.out.println("Fuerza equipo B: "+fuerzaB);            int dF= fuerzaB-fuerzaA;         System.out.println("La diferencia es: "+dF);     } } 

Este código que hice me di cuenta que no resuelve el problema eficientemente, porque abra un equipo que tendrá A=(1,1,1,1,1,1) y el equipo B=(6), se balancea pero se que no es la mejor practica.

Como puedo crear un código que pueda distribuir la fuerza entre los equipos, es decir, ir lanzado a los mejores en ambos equipos basado en su diferencia hasta que ese equipo sea mejor que el otro.

Ejemplo:

int[] equipoDeJuego = {8,8,9,6};  Equipo A={8,9};  Equipo B={8,6};  

No se agregan elementos a la lista

soy novato programando en python y mi duda es la siguiente: Me enviaron a realizar un programa donde el usuario tiene que ingresar palabras, el programa concluye cuando se ingresan 10 palabras o ingresa un string vacio. No se porque no me imprime la lista con las 10 palabras sino solo me imprime la ultima palabra que ingreso.

listapalabras=[] ingresospalabras=str(input('ingrese palabras: ')) listapalabras.append(ingresospalabras) i=1 while(i<=10) and not(ingresospalabras==''): ingresospalabras=str(input('ingrese palabras:')) listapalabras=[] listapalabras.append(ingresospalabras) i+=1 if i==10:     print(listapalabras)     exit() 

Angular 6 problema en checkbox elementos duplicados

Estoy teniendo problemas a la hora de guardar información de los checkbox.

Cuando por primera vez seleccionas los elementos funciona correctamente. Cuando vuelves a seleccionar nuevos elementos o eliminar alguno de los anteriores para hacer una consultar, mantiene los primeros y añade lo nuevo que tiene la ventana. Solo tendría que visualizar los checkbox seleccionados en ese momento.

Por ejemplo selecciono el vestido, colonia y zapatos la primera vez. La segunda vez eliminó zapatos y en mi array queda vestido, colonia,zapatos,vestido,colonia.

Como puedo solucionar este problema?

Estoy trabajando en Angular 6 este es mi html:

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">                 <div class="modal-dialog modal-lg" role="document">                     <div class="modal-content">                         <div class="modal-header">                             <h5 class="modal-title" id="exampleModalLabel">{{ 'SENSOR.CHOOSE_SENSORS' | translate }}</h5>                             <button type="button" class="close" data-dismiss="modal" aria-label="Close">                       <span aria-hidden="true">&times;</span>                     </button>                         </div>                          <div class="modal-body">                             <div class="container-fluid">                                 <div class="row">                                      <div class="col-md-6 col-lg-6 col-6" *ngFor="let data of stationtypes">                                         <input class="form-check-input" type="checkbox" name="miDataInterior" (change)="$  event.target.checked ? agregar(data) : quitar(data) ">                                         <label class="form-check-label" for="inlineCheckbox1">{{data.sensor_type.name_comun}} - <font SIZE=3> {{data.marca}} </font></label>                                         <!-- Quita las plecas para descomentar cuando uses el objeto {name: string}[] -->                                     </div>                                 </div>                               </div>                          </div>                          <div class="modal-footer">                             <button type="button" class="btn btn-secondary" data-dismiss="modal">{{ 'BUTTON.CERRAR' | translate }}</button>                             <button type="submit" value="Actualizar" (click)="guardar()" class="btn btn-outline-info">{{ 'BUTTON.GUARDAR' | translate }}</button>                         </div>                     </div>                 </div>             </div>             <!--</form>-->         </div> 

El código de mi component:

  agregar(data: string) {     this.miDataInterior.push(data);     //console.log('mostramos este miDataInterior: ' + JSON.stringify(this.miDataInterior));   }    quitar(data) {     this.miDataInterior = this.miDataInterior.filter(s => s !== data);   }    guardar() {     //console.log(this.miDataInterior);     //console.log(this.checkboxstation);     //console.log(this.checkboxsensores);     console.log('mostramos este miDataInterior: ' + JSON.stringify(this.miDataInterior));     for (let i = 0; i < this.miDataInterior.length; i++) {       const element = this.miDataInterior[i];       this.checkboxstation.push(this.miDataInterior[i].id_station);     }     /*this.miDataInterior.forEach(element => {       this.checkboxstation.push(element.id_station);       //this.checkboxsensores.push(element.id_station.sensor_type.name);      });*/     console.log('mostramos este valor checkboxstation: ' + this.checkboxstation);       } 

La función agregar si funciona correctamente, pero cuando lo paso a guardar da ese error.

¿Cómo imprimo los elementos char de un vector en C++?

Pues, este es un vector que intenta capturar las letras, o sea, que cada elemento del vector sea una letra que se va digitando, no obstante, al final no sé cómo imprimir las letras antes digitadas.

Esta es solo una función.


char ingresaChar() {     char character = ' ';     int i = 0;      if (i < 100) {         while (character != '0') {             cout << "Digite una letra para formar la frase, o digite '0' para finalizar" << endl;             cout << "Letra: ";             cin >> frase[i];              character = frase[i];              i++;         }         cout << "elemento " << i << " es: " << frase[i] << endl;     }     else         return 0; } 

Como evito que elementos se repitan dentro de un foreach c# ef-codefirst mvc5

public static List<string[]> GetIEWithSubSubClasificación(List<VoucherModel> lstVoucher, List<CuentaContableModel> lstCuentaContable ,List<string> listaSubSubClasificacion) {     List<string[]> ReturnValues = new List<string[]>();      decimal TotalSumasResultadoPerdidas = 0;     decimal TotalSumasResultadoGanancias = 0;     int NumeroDeColumnas = 3;     //List<CuentaContableModel> ListaCuentas = ObjCliente.CtaContable.ToList();     //var lstSubSubCategorias = ListaCuentas.Where(x => x.SubSubClasificacion != null).Select(x => x.SubSubClasificacion).FirstOrDefault();     int ContadorDeIteracion = 0;     foreach (CuentaContableModel Cuenta in lstCuentaContable)     {          List<DetalleVoucherModel> lstDetalle = lstVoucher.SelectMany(x => x.ListaDetalleVoucher).Where(r => r.ObjCuentaContable.CuentaContableModelID == Cuenta.CuentaContableModelID).ToList();          if (lstDetalle.Count == 0)             continue;          if (Cuenta.Clasificacion == ClasificacionCtaContable.RESULTADOGANANCIA)         {             decimal SumasDebitosEstaCuenta = 0;             decimal SumasCreditosEstaCuenta = 0;              SumasDebitosEstaCuenta = GetTotalDebe(lstDetalle);             SumasCreditosEstaCuenta = GetTotalHaber(lstDetalle);              decimal TotalSaldoEstaCuenta = SumasDebitosEstaCuenta - SumasCreditosEstaCuenta;             //string Fecha = ParseExtensions.ToDD_MM_AAAA(lstDetalle.First().FechaDoc);             var CodigoInterno = Cuenta.CodInterno;             var CodigoInternoSubSub = Cuenta.SubSubClasificacion.CodigoInterno; 

En esta parte meto la subsubclasificación la idea sería que solo aparezca una sola vez la susubclasificación de una cuenta contable y luego se imprimieran las cuentas contables que pertenecen a esa subsubclasificación. Lo que pasa realmente es que por cada cuenta contable se imprime la subsubclasificación osea se repite si existen varias cuentas contables que pertenecen a una subsubclasificacion ¿Existe alguna manera de hacer que no se repitan? y queden como el ideal que dije?

                    string[] subsubrow = new string[NumeroDeColumnas];                     subsubrow[0] = CodigoInternoSubSub + "   " +                       Cuenta.GetSubSubClasificacionName();                     ReturnValues.Add(subsubrow);                    string[] IEstResultRow = new string[NumeroDeColumnas];                     IEstResultRow[0] = Cuenta.CodInterno;                     IEstResultRow[1] = Cuenta.nombre;                     TotalSumasResultadoGanancias += Math.Abs(TotalSaldoEstaCuenta);                     IEstResultRow[2] = ParseExtensions.NumberWithDots_para_BalanceGeneral(Math.Abs(TotalSaldoEstaCuenta));                    ReturnValues.Add(IEstResultRow);                 //guardaremos el resultado del rellenado y orden de los  resultados en el array "ReturnValues" este contendrá lo necesario para enviarselo al controlador y este plasme el resultado en la vista.         }      } 

Acá dejaré una foto para que vean como sale el resultado

Si se dan cuenta las que están marcadas con rojo son 3 osea que hay 3 cuentas contables que tienen la misma subsubclasificacion (lo que se está repitiendo) la idea seria que fuera solo 1 Agradecería una pequeña ayuda muchas gracias.

Producto de lo elementos de una fila

podria por favor ayudarme a calcular el producto de los elementos de una fila que es elegida por el usuario. Este es el ejercicio: Construir un programa que cree una matriz de tamaño MxN, llenarla con números aleatorios y calcular el producto de los elementos de la fila seleccionada por el usuario. matriz=[]

filas=int(input(“cantidad de filas: “)) columnas= int(input(“cantidad de columnas: “))

for i in range(filas): matriz.append([0]*columnas) for f in range(filas): for g in range(columnas): matriz[f][g]= int(input(“elemento ( %d, %d ): ” % (f,g))) print(matriz)

n=int(input(“ingrese la fila a calcular: “)) producto=[]

for i in range (filas): producto.append(matriz[n][i]) print(producto)

for i in range(len(producto)): print(i*producto)