Necesito eliminar todos los pasajes que contienen caracteres no latinos de una cadena; sin embargo, a diferencia de muchas respuestas que he visto, también quiero eliminar la puntuación en esos pasajes y dejar la misma puntuación en los pasajes en inglés.
Para decirlo de otra manera, cuando se encuentra un carácter no latino como "ָהּ", la expresión regular comenzará a omitir todo, incluida la puntuación ASCII, hasta que se encuentre un carácter [a-zA-Z].
Probé el siguiente ejemplo, pero está eliminando incorrectamente la cita después de "mitades", lo que me hace creer que no tengo una buena definición de caracteres no latinos.
[\u0250-\ue007][^a-zA-Z]*
Aquí hay un ejemplo de texto de entrada (actualizado):
or perhaps, a - אוֹ דִילְמָא אֵין אִשָּׁה מִתְקַדְּשֶׁת לַחֲצָאִין כְּלָל (12);time תֵּיקוּ person cannot be in separate halves at all, even though both "halves” would come together simultaneously?(13) The speaker replies:(14)y la cadena resultante es:
or perhaps, a - time person cannot be in separate halves at all, even though both "halveswould come together simultaneously?(13) The speaker replies:(14)Como puede ver, se equivoca en la tercera línea. Obviamente, podría excluir a ese personaje en particular, pero me preocupa que se estropee en otros casos extremos.
¿Alguna otra idea? (Estoy trabajando con Javascript por cierto)
Entiendo que por " un carácter no latino como הּ " te refieres a cualquier letra que no sea ASCII .
Para hacer coincidir cualquier letra que no sea una letra ASCII, puede usar [^\P{L}a-zA-Z] . Esta es una clase de carácter negado que coincide con cualquier carácter que no sea un carácter que no sea una letra ( \P{L} ) y letras ASCII ( a-zA-Z ). Entonces, es básicamente el patrón \p{L} con la excepción de las letras ASCII.
Este patrón basado en la clase de caracteres Unicode requiere un indicador u , compatible con el entorno JavaScript de Node.js.
La solución se verá como
text = text.replace(/[^\P{L}az][^az]*/gui, '') Tenga en cuenta que la bandera g hace que replace reemplace todas las apariciones en la cadena e i se usa para acortar el patrón de letras ASCII (ya que hace que el patrón no distinga entre mayúsculas y minúsculas).
Vea la demostración de JavaScript:
const text = `or perhaps, a - אוֹ דִילְמָא אֵין אִשָּׁה מִתְקַדְּשֶׁת לַחֲצָאִין כְּלָל (12);time תֵּיקוּ person cannot be in separate halves at all, even though both "halves” would come together simultaneously?(13) The speaker replies:(14)`; console.log( text.replace(/[^\P{L}az][^az]*/gui, '') )Producción:
or perhaps, a - time person cannot be in separate halves at all, even though both "halves” would come together simultaneously?(13) The speaker replies:(14)