Tecnicamente, na entrada fornecida, não há duplicatas como "A. mucosa bucal ”e“ A. mucosa bucal 'diferem em número de espaços após' A. '
No entanto, a intuição sugere que tais casos devem ser vistos de alguma forma.
Como você mencionou no comentário que está usando o link , usarei esta página para fazer as correspondências e substituições.
Selecionei o sabor: javascript e defina dois sinalizadores na seção de expressões regulares: g (global) es (linha única).
Eu vou usar 3 padrões para lidar com essa string.
O primeiro padrão procura idênticas ocorrências de question_and_answer. Se houver discrepâncias entre eles, eles não serão tratados como duplicados.
Se houver mais de uma duplicata, todas serão capturadas.
(?<=^|\n)([^\n]+)(\n)(\D{1}\.\s+[^^]+?)(\n{2})(?=[^^]*\n)
Entrada (TEST STRING):
Question 1?
A. SomeA1.
B. SomeB1.
Question 1?
A. SomeA1.
B. SomeB1.
Question 1?
A. SomeA1.
B. SomeB1.
Saída (SUBSTITUIÇÃO): // uma duplicata removida
Question 1?
A. SomeA1.
B. SomeB1.
Question 1?
A. SomeA1.
B. SomeB1.
Sequisermosapenasencontrarduplicatascombasenasperguntas,essepadrãodevefuncionar,masdeveserusadoapenasparafinsinformativos.
(?<=^|\n)([^\n]+)(\n)(\D{1}\.\s+[^^]+?)(\n{2})(?=[^^]*)
Entrada(TESTSTRING):
Question1?A.SomeA1.B.SomeB1.Question1?A.SomeA1.B.SomeB1.Question1?A.SomeA1.B.SomeB1.
Saída(SUBSTITUIÇÃO)://pareceok,maséumtruqueedeveserusadocomcautela
Question1?A.SomeA1.B.SomeB1.
Idealmente,sesoubermosquetipodedesviosencontraremosnosdados,poderemoslimparosdadosantesqueoprimeiropadrãosejaaplicado,comonoexemploaseguir,ondeváriosespaçossãosubstituídosporapenasumespaço.
Localizar:(?<=\n)(\D{1}\.)(\s+)([^^]+?\n)
Substituição:
Entrada(TESTSTRING):
Lichenplanusoccursmostfrequentlyonthe?A.buccalmucosa.B.tongue.C.floorofthemouth.D.gingiva.
Saída(SUBSTITUIÇÃO):
Lichenplanusoccursmostfrequentlyonthe?A.buccalmucosa.B.tongue.C.floorofthemouth.D.gingiva.