Removendo parágrafos duplicados com o Edit Pad Pro ou o Notepad ++

0

Eu tenho um .docx arquivo que contém mcqs que estão no formato como mostrado abaixo. O problema é que existem muitos mcqs duplicados e, portanto, gostaria de saber se um regex pode ser criado para detectar todos os mcqs duplicados.

Tenho Edit Pad Pro 7, Notepad ++, powergrep e texto sublime. e todo o regex que eu usei até agora excluiu duplicatas linha por linha, excluindo opções de outras perguntas, mesmo que as perguntas não correspondam.

Então, basicamente, o que estou dizendo é que preciso de um regex que possa excluir todos os mcqs duplicados apenas se o mcq inteiro corresponder, não linhas ou frases individuais.

Como sou novato em relação à regex, desculpe-me por qualquer inadequação.

Lichen planus occurs most frequently on the?
A.  buccal mucosa.
B.  tongue.
C.  floor of the mouth.
D.  gingiva.

In the absence of “Hanks balanced salt solution”, what is the most appropriate media to transport an avulsed tooth?
A.  Saliva.
B.  Milk.
C.  Saline.
D.  Tap water.

Which of the following is the most likely cause of osteoporosis, glaucoma, hypertension and peptic ulcers in a 65 year old with Crohn’s disease?
A.  Uncontrolled diabetes.
B.  Systemic corticosteroid therapy.
C.  Chronic renal failure.
D.  Prolonged NSAID therapy.
E.  Malabsorption syndrome.

Lichen planus occurs most frequently on the?
A. buccal mucosa.
B. tongue.
C. floor of the mouth.
D. gingiva.

resultado esperado

Lichen planus occurs most frequently on the?
A.  buccal mucosa.
B.  tongue.
C.  floor of the mouth.
D.  gingiva.

In the absence of “Hanks balanced salt solution”, what is the most appropriate media to transport an avulsed?
A.  Saliva.
B.  Milk.
C.  Saline.
D.  Tap water.

Which of the following is the most likely cause of osteoporosis, glaucoma, hypertension and peptic ulcers in a 65 year old with Crohn’s disease?
A.  Uncontrolled diabetes.
B.  Systemic corticosteroid therapy.
C.  Chronic renal failure.
D.  Prolonged NSAID therapy.
E.  Malabsorption syndrome.
covil
fonte
11
Não vejo duplicado no seu exemplo. conceda, edite sua pergunta e dê o resultado esperado.
Toto
Apenas mudei agora.thnx.
den

Respostas:

0
  • Ctrl+H
  • Encontre o que: (([^?]+\?\R(?:.+\.\R)+)[\s\S]+?)\2
  • Substituir com: $1
  • check Wrap around
  • check Expressão regular
  • NÃO VERIFIQUE . matches newline
  • Replace all

Explicação:

(           : start group 1
  (         : start group 2
    [^?]+   : 1 or more any character that is not "?"
    \?      : a question mark
    \R      : any kind of line break
    (?:     : start non capture group
      .+    : 1 or more any character but newline
      \.    : a dot
      \R    : any kind of line break
    )+      : end group, must appear 1 or more times
  )         : end group 2
  [\s\S]+?  : 1 or more any character, not greedy
)           : end group 1
\2          : another occurrence of group 2

Substituição:

$1          : content of group 1
Toto
fonte
@den: De nada, que bom que ajuda.
Toto
@den: Sinta-se livre para marcar a resposta como aceite, veja: superuser.com/help/someone-answers
Toto
Existe uma maneira de marcar o McQ individualmente como um parágrafo permanentemente. Para que até a palavra ms o reconheça como um parágrafo.
Den
funcionou, mas o problema é que ele remove até mesmo o original para exp input = pharagraph1, pharagraph2, pharapraph3, pharagraph1 result = pharagraph3, pharagraph3 .pharagraph 1 é excluído completamente Eu quero um código que exclua apenas a duplicata e mantenha 1 cópia de tudo . espero que eu esteja claro. e thnx antecipadamente
den
@den: Isso é estranho, funciona bem para mim, tenho o Notepad ++ v7.5.6.
Toto
0

Tecnicamente, na entrada fornecida, não há duplicatas como 'A. mucosa bucal. e 'A. mucosa bucal. diferem no número de espaços após 'A.'.

No entanto, a intuição sugere que esses casos devem ser detectados de alguma forma.

Como você mencionou no comentário que está usando https://regex101.com/ , usarei esta página da web para fazer as correspondências e substituições.
Selecionei flavor: javascript e defina dois sinalizadores na seção de expressões regulares: g (global) es (linha única).

Vou usar 3 padrões para lidar com essa string.

O primeiro padrão procura por ocorrências idênticas 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 elas serão capturadas.

(?<=^|\n)([^\n]+)(\n)(\D{1}\.\s+[^^]+?)(\n{2})(?=[^^]*\1\n\3)

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.


insira a descrição da imagem aqui

Se apenas queremos encontrar duplicatas com base nas perguntas, esse padrão deve funcionar, mas deve ser usado apenas para fins informativos.

(?<=^|\n)([^\n]+)(\n)(\D{1}\.\s+[^^]+?)(\n{2})(?=[^^]*\1)

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): // parece ok, mas é um truque e deve ser usado com cuidado

Question 1?
A. SomeA1.
B. SomeB1.


insira a descrição da imagem aqui

Idealmente, se soubermos que tipo de desvios podemos encontrar nos dados, podemos limpá-los antes que o primeiro padrão seja aplicado, como no exemplo a seguir, onde vários espaços são substituídos por apenas um espaço.

Localizar: (?<=\n)(\D{1}\.)(\s+)([^^]+?\n)
Substituição: \1 \3

Entrada (TEST STRING):

Lichen planus occurs most frequently on the?
A.  buccal mucosa.
B.             tongue.
C.                        floor of the mouth.
D.  gingiva.


Saída (SUBSTITUIÇÃO):

Lichen planus occurs most frequently on the?
A. buccal mucosa.
B. tongue.
C. floor of the mouth.
D. gingiva.


insira a descrição da imagem aqui

wlod
fonte
Esses regex não funcionam no Npp. Com o que você quer combinar [^^]*?
Toto
@ Na verdade, esses padrões não funcionam no N ++, mas tive a impressão de que o @den provavelmente está interessado em uma solução, e não apenas em N ++. Também tentei resolvê-lo em N ++ e esses dois padrões devem fazer o trabalho, o que significa que é possível remover várias duplicatas consecutivas e não consecutivas. Basta colocar \nna caixa de texto substituir: (1) (^[^\e]+?$)(\R)(\D{1}\.\s+[^\e]+?)(\R{2})(?=[^\e]*\1\2\3); (2) (^[^\e]+?)(\R)(\R)(?=[^^]*\1(\R|$)). Ainda haverá muitas novas linhas, mas os dados em si serão bem estruturados e fáceis de trabalhar para humanos e máquinas.
Wlod
OK, mas com o que você está tentando combinar [^^]*e [^\e]*?
Toto
Frequentemente alterno entre sistemas diferentes com muitos tipos de expressões regulares e não quero pensar a cada vez o que capturará, por exemplo, um ponto em um determinado contexto, por isso escolho algum personagem que, com certeza, não aparecerá no texto como BEL (\ a) ou ESC (\ e) e use-o para combinar o máximo de caracteres possível até que o grupo limitador seja atingido. No modo de linha única, há apenas um ^'início de linha', então eu frequentemente o uso para capturas gananciosas. [^^]*significa 0 ou o máximo de caracteres possível.
Wlod
^dentro de uma classe de caractere não significa "início de linha", mas nega a classe de caractere quando na primeira posição, significa simplesmente um sinal de intercalação ^ , portanto [^^]*não significa um sinal de intercalação 0 ou mais vezes.
Toto