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?

substringyindexofRespuestas:
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
InvariantCultureno 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.Splitcon la sobrecarga que toma unstring[]para los delimitadores, pero eso también sería excesivo.Mire
SubstringyIndexOf: 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
firstStringya contiene ellastString. Lo que quería era extraer un access_token de una respuesta JSON (sin analizador JSON cargado). MifirstStringera\"access_token\": \"y milastStringera\". 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.
PPes la cadena anterior ,FFes 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 quePPyFFestán precedidos y seguidos por límites de palabras (de modo quePPAyFF8no coinciden).Mis suposiciones, reflejadas en los sombreros de fiesta, son las siguientes:
PPpuede estar precedida por una (o más)FFsubcadenas, que, si están presentes, se ignoran;PPva seguido de uno o másPPs antesFF, los siguientesPPs son parte de la subcadena entre las cadenas anterior y siguiente;PPva seguido de uno o másFFs antes de encontrar unPPes, el primerFFsiguientePPse 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
Fy 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