Tengo una cadena llamada "hola mundo"
Necesito reemplazar la palabra "mundo" por "csharp"
para esto uso:
string.Replace("World", "csharp");
pero como resultado, no consigo reemplazar la cadena. La razón es la sensibilidad a mayúsculas y minúsculas. La cadena original contiene "mundo", mientras que estoy tratando de reemplazar "Mundo".
¿Hay alguna manera de evitar esta distinción entre mayúsculas y minúsculas en string.
Respuestas:
Podría usar un Regex y realizar un reemplazo sin distinción entre mayúsculas y minúsculas:
fuente
hello. world?
ni nada que contenga operadores de expresiones regulares.El Regex.Escape es útil si se basan en la entrada del usuario, que puede contener elementos del lenguaje de expresiones regulares
Actualizar
Gracias a los comentarios, en realidad no tienes que escapar de la cadena de reemplazo.
Aquí hay un pequeño violín que prueba el código :
Su salida es:
fuente
Regex.Escape
es malo, prefijará caracteres especiales con barras invertidas. Parece que la mejor manera es .Replace ("$", "$$"), que es un poco tonto ( stackoverflow.com/a/10078353 ).Método 2.5X MÁS RÁPIDO y MÁS EFECTIVO que los métodos de expresiones regulares de otros:
Nota: ignore caso ==
StringComparison.OrdinalIgnoreCase
como parámetro paraStringComparison comparisonType
. Es la forma más rápida y sin distinción entre mayúsculas y minúsculas para reemplazar todos los valores.Ventajas de este método:
newValue
ennull
), optimizado para esto;string.Replace
comportamiento original de .NET C # , las mismas excepciones;Prueba de referencia : esta solución es 2,59 veces más rápida que la expresión regular de @Steve B., código:
Idea original - @ Darky711; gracias @MinerR por
StringBuilder
.fuente
String
. Sin embargo, elStringBuilder
es realmente más rápido en un 30-40% que elString
. He actualizado la solución. Gracias;)Las extensiones nos hacen la vida más fácil:
fuente
Muchas sugerencias usando Regex. ¿Qué tal este método de extensión sin él?
fuente
comparison
El parámetro debe usarse enIndexOf
lugar deStringComparison.CurrentCultureIgnoreCase
if(old.Equals(@new, comparison)) return @new;
ya que la nueva cadena puede diferir en mayúsculas / minúsculas.Puede usar el espacio de nombres Microsoft.VisualBasic para encontrar esta función auxiliar:
fuente
( Editado: no estaba al tanto del problema del 'enlace desnudo', lo siento)
Tomado de aquí :
Parece que no eres el primero en quejarte de la falta de una cadena que no distinga entre mayúsculas y minúsculas.
fuente
Se modificó la respuesta de @ Darky711 para usar el tipo de comparación aprobada y coincidir con el marco, reemplazar los nombres y los comentarios xml lo más cerca posible.
fuente
He escrito el método de extensión:
Utilizo dos métodos de extensión adicionales para el método de extensión anterior:
fuente
IsNot
está tomando las extensiones demasiado en serio :).IsNot
Extender la respuesta de Petrucio con
Regex.Escape
la cadena de búsqueda y escapar del grupo coincidente como se sugiere en la respuesta de Steve B (y algunos cambios menores a mi gusto):Lo que producirá los siguientes resultados esperados:
Sin embargo, sin realizar los escapes, obtendría lo siguiente, que no es un comportamiento esperado de un
String.Replace
caso que no distingue entre mayúsculas y minúsculas:fuente
Esto no funciona: no puedo imaginar que otra cosa sea mucho más rápida o fácil.
fuente
La siguiente función es eliminar todas las palabras de coincidencia como (this) del conjunto de cadenas. Por Ravikant Sonare.
fuente
Usando la solución @Georgy Batalov tuve un problema al usar el siguiente ejemplo
string original = "bla, DC = bleh, DC = blih, DC = bloh, DC = com"; cadena reemplazada = original.ReplaceIgnoreCase (", DC =", ".")
A continuación se muestra cómo reescribí su extensión
fuente
a continuación se muestra la alternativa para reemplazar la cadena ignorando el caso de caracteres
fuente
También puedes probar la
Regex
clase.var regex = new Regex( "camel", RegexOptions.IgnoreCase ); var newSentence = regex.Replace( sentence, "horse" );
fuente
Prefiero esto: "Hello World". ToLower (). Reemplazar ("world", "csharp");
fuente