Estoy usando esta expresión regular:
\n\n|(?<=[^,][."*?!\^])(?!\.)[ ](?=["*]?[AZ]) Para hacer coincidir el espacio vacío después de una oración (estoy usando [ ] para mostrarle las coincidencias):
First sentence.[ ]Middle a sentence..[ ]Last sentence. First sentence?[ ]Middle a sentence!.[ ]Last sentence. "First sentence," Middle a sentence..[ ]Last sentence. "First sentence."[ ]"Middle a sentence.".[ ]Last sentence. Ha funcionado bien hasta ahora. Pero ahora quiero que la expresión regular no coincida cuando hay .. , ?. , !. , .". , etc. al final de una oración. En otras palabras, cuando hay un punto extra:
First sentence.[ ]Middle a sentence.. Last sentence. First sentence?[ ]Middle a sentence!. Last sentence. "First sentence," Middle a sentence.. Last sentence. "First sentence."[ ]"Middle a sentence.". Last sentence. Pensé que agregar un (?!\.) haría el truco:
\n\n|(?<=[^,][."*?!\^])(?!\.)[ ](?=["*]?[AZ])Pero, como puede ver aquí , todavía coincide con los espacios vacíos después del período adicional.
¿Por qué es esto y cómo solucionarlo?
Puede extender esta clase negada [^,] con todos los demás caracteres que no desea que aparezcan como penúltimo carácter en una oración.
Entonces como: [^,.]
Sin embargo, si desea permitir que ." termine una oración, y solo quiere evitar dos puntos (o !. y ". ), entonces coloque su condición de mirar alrededor allí como retrospectiva:
(?<=[^,][."*?!\^])(?<![.!?"]\.)