Tengo una cadena como:
"super exemple of string key : text I want to keep - end of my string"
Solo quiero mantener la cadena que está entre "key : "
y " - "
. ¿Cómo puedo hacer eso? ¿Debo usar una expresión regular o puedo hacerlo de otra manera?
substring
yindexof
Respuestas:
Quizás, una buena forma es simplemente cortar una subcadena :
fuente
o solo con operaciones de cadena
fuente
Puedes hacerlo sin regex
fuente
Dependiendo de cuán robusto / flexible desee que sea su implementación, esto puede ser un poco complicado. Aquí está la implementación que uso:
fuente
InvariantCulture
no funciona con aplicaciones universales de Windows. ¿Hay alguna forma de eliminarlo manteniendo la funcionalidad de su clase? @ChaseMedallionEsta es la forma en que puedo hacer eso
fuente
Creo que esto funciona:
fuente
Regex es exagerado aquí.
Se podría usar
string.Split
con la sobrecarga que toma unstring[]
para los delimitadores, pero eso también sería excesivo.Mire
Substring
yIndexOf
: el primero para obtener partes de una cadena dadas y un índice y una longitud y el segundo para encontrar cadenas / caracteres indexados.fuente
string.Split
.Una solución LINQ funcional:
fuente
fuente
Dado que el
:
y el-
son únicos, puede usar:fuente
o, con una expresión regular.
con un ejemplo corriente .
Puedes decidir si es exagerado.
o
como un método de extensión poco validado
fuente
Esto devuelve solo el (los) valor (es) entre "clave:" y la siguiente aparición de "-"
fuente
Puede utilizar el método de extensión a continuación:
El uso es:
fuente
Usé el fragmento de código de Vijay Singh Rana que básicamente hace el trabajo. Pero causa problemas si
firstString
ya contiene ellastString
. Lo que quería era extraer un access_token de una respuesta JSON (sin analizador JSON cargado). MifirstString
era\"access_token\": \"
y milastString
era\"
. Terminé con una pequeña modificaciónfuente
Si está buscando una solución de 1 línea, esta es:
La solución completa de 1 línea, con
System.Linq
:fuente
Ya tiene algunas buenas respuestas y me doy cuenta de que el código que estoy proporcionando está lejos de ser el más eficiente y limpio. Sin embargo, pensé que podría ser útil con fines educativos. Podemos usar clases y bibliotecas preconstruidas durante todo el día. Pero sin comprender el funcionamiento interno, simplemente estamos imitando y repitiendo y nunca aprenderemos nada. Este código funciona y es más básico o "virgen" que algunos de los otros:
Termina con la cadena deseada asignada a la variable parsedString. Tenga en cuenta que también capturará los espacios anteriores y posteriores. Recuerde que una cadena es simplemente una matriz de caracteres que se puede manipular como otras matrices con índices, etc.
Cuídate.
fuente
Si desea manejar múltiples apariciones de pares de subcadenas, no será fácil sin RegEx:
Si el orden y el recuento de ocurrencias de las subcadenas no importa, este rápido y sucio puede ser una opción:
Al menos evita la mayoría de las excepciones, devolviendo la cadena original si ninguna o una subcadena coinciden.
fuente
Como siempre digo, nada es imposible:
Espero haber ayudado.
fuente
Algo como esto tal vez
fuente
Cuando las preguntas se formulan en términos de un solo ejemplo, es inevitable que surjan ambigüedades. Esta pregunta no es una excepción.
Para el ejemplo dado en la pregunta, la cadena deseada es clara:
Sin embargo, esta cadena no es más que un ejemplo de cadenas y cadenas de límites para las que se deben identificar ciertas subcadenas. Consideraré una cadena genérica con cadenas de límite genéricas, representadas de la siguiente manera.
PP
es la cadena anterior ,FF
es la cadena siguiente y los sombreros de fiesta indican qué subcadenas deben coincidir. (En el ejemplo dado en la preguntakey :
es la cadena anterior y-
es la cadena siguiente.) He asumido quePP
yFF
están precedidos y seguidos por límites de palabras (de modo quePPA
yFF8
no coinciden).Mis suposiciones, reflejadas en los sombreros de fiesta, son las siguientes:
PP
puede estar precedida por una (o más)FF
subcadenas, que, si están presentes, se ignoran;PP
va seguido de uno o másPP
s antesFF
, los siguientesPP
s son parte de la subcadena entre las cadenas anterior y siguiente;PP
va seguido de uno o másFF
s antes de encontrar unPP
es, el primerFF
siguientePP
se considera que es la siguiente cadena.Tenga en cuenta que muchas de las respuestas aquí tratan solo con cadenas de la forma
o
Se puede usar una expresión regular, construcciones de código o una combinación de las dos para identificar las subcadenas de interés. No hago ningún juicio sobre cuál es el mejor enfoque. Solo presentaré la siguiente expresión regular que coincidirá con las subcadenas de interés.
¡Enciende tu motor! 1
Probé esto con el motor de expresiones regulares PCRE (PHP), pero como la expresión regular no es nada exótica, estoy seguro de que funcionará con el motor de expresiones regulares .NET (que es muy robusto).
El motor de expresiones regulares realiza las siguientes operaciones:
Esta técnica, de hacer coincidir un carácter a la vez, siguiendo la cadena anterior, hasta que el carácter es
F
y es seguido porF
(o más generalmente, el carácter inicia la cadena que constituye la siguiente cadena), se llama Solución de token codicioso templado .Naturalmente, la expresión regular tendría que modificarse (si es posible) si se cambian las suposiciones que establecí anteriormente.
1. Mueva el cursor para obtener explicaciones detalladas.
fuente
En C # 8.0 y superior, puede usar el operador de rango
..
como enConsulte la documentación para obtener más detalles.
fuente