¿Me pueden ayudar a entender cómo hacer lo siguiente?
Tengo cadenas (3 formatos para esta cadena):
Quiero obtener el resultado:
Ahora tengo la expresión regular (pero no me funciona debido al '&'):
Section_1:\s*(?<section_1>\w+)(\s*\|\s*(Section_2:(\s*(?<section_2>.*))?)?)?Nota: la expresión regular está capturando 2 grupos: "sección_1" y "sección_2"
La pregunta es: ¿cómo puedo leer la subcadena? La lata contiene cero o más de " & {palabra}"
Gracias por adelantado
Según los comentarios, establecimos que la combinación ' & '- actúa como un delimitador entre palabras. Probablemente hay muchas formas de escribir un patrón para capturar estas subcadenas, pero para mí, estas se pueden agrupar en extensas o simples. Dependiendo de si necesita validar la entrada más a fondo, puede usar:
^section_1:\s*(?<section_1>[az]+(?:\s&\s[az]+)*)\s*\|\s*section_2:\s*(?<section_2>[az]+(?:\s&\s[az]+)*)$Vea una demostración en línea. El patrón significa:
^ - Anclaje de línea de salida;section_1:\s* - Coincide con 'Section_1:' literalmente seguido de 0+ caracteres de espacio en blanco;(?<section_1>[az]+(?:\s+&\s[az]+)*) - Un grupo de captura con nombre para capturar [az]+ como 1+ letras mayúsculas/minúsculas (marca que no distingue entre mayúsculas y minúsculas), seguido de un grupo de no captura anidado que coincide con 0+ veces el patrón (?:\s&\s[az]+)* para probar cualquier delimitador como se indicó anteriormente, seguido de otra palabra;\s*\|\s*section_2:\s* - Coincide con los caracteres de espacio en blanco, un símbolo de tubería literal y, literalmente, 'Sección_2:' hasta;(?<section_2>[az]+(?:\s&\s[az]+)*) - Un segundo grupo de captura con nombre que coincide con el mismo patrón que el grupo de captura con nombre anterior;$ - Anclaje de línea final. Nota : como se mencionó, hay un montón de patrones diferentes que uno podría usar dependiendo de qué tan específico deba ser acerca de la validación de la entrada. Por ejemplo: \s*(?<section_1>[^:|]+?)\s*\|\s*[^:]*:\s*(?<section_2>.+) también puede funcionar.