У меня есть файл .docx который содержит mcqs в формате, как показано ниже. Проблема в том, что существует много дублирующих mcq, и поэтому я хотел бы знать, можно ли создать регулярное выражение для обнаружения всех дублирующих mcq.

У меня есть Edit Pad Pro 7, Notepad++, powergrep и возвышенный текст. и все регулярные выражения, которые я использовал до сих пор, удаляли дубликаты построчно, тем самым удаляя варианты из других вопросов, даже если вопросы не совпадают.

Итак, в основном я говорю о том, что мне нужно регулярное выражение, которое может удалить все дублирующиеся mcqs, только если совпадает весь mcq, а не отдельные строки или предложения.

Я новичок в отношении регулярных выражений, поэтому прошу прощения за любые недостатки.

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.

ожидаемый результат

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.

2 ответа2

0
  • Ctrl+H
  • Найти что: (([^?]+\?\R(?:.+\.\R)+)[\s\S]+?)\2
  • Заменить на: $1
  • проверить обернуть
  • проверьте регулярное выражение
  • НЕ ПРОВЕРИТЬ . matches newline
  • Заменить все

Объяснение:

(           : 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

Замена:

$1          : content of group 1
0

Технически в данном входе нет дубликатов как 'A. щечной слизистой оболочки.' и 'А. щечной слизистой оболочки.' различаются по количеству пробелов после 'A'.

Однако интуиция подсказывает, что такие случаи нужно как-то заметить.

Как вы упомянули в комментарии, что вы используете https://regex101.com/, я буду использовать эту веб-страницу для совпадений и замен.
Я выбрал flavor: javascript и установил два флага в секции регулярных выражений: g (глобальный) и s (одиночная строка).

Я буду использовать 3 шаблона для работы с этой строкой.

Первый шаблон ищет идентичные события question_and_answer. Если между ними есть расхождения, они не будут рассматриваться как дубликаты.
Если есть более одного дубликата, все они будут захвачены.

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

Вход (строка теста):

Question 1?
A. SomeA1.
B. SomeB1.

Question 1?
A.     SomeA1.
B.     SomeB1.

Question 1?
A. SomeA1.
B. SomeB1.

Вывод (ЗАМЕНА): // удален один дубликат

Question 1?
A.     SomeA1.
B.     SomeB1.

Question 1?
A. SomeA1.
B. SomeB1.



Если мы просто хотим найти дубликаты на основе вопросов, тогда этот шаблон должен работать, но должен использоваться только для информации.

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

Вход (строка теста):

Question 1?
A. SomeA1.
B. SomeB1.

Question 1?
A.     SomeA1.
B.     SomeB1.

Question 1?
A. SomeA1.
B. SomeB1.

Вывод (ЗАМЕНА): // это выглядит нормально, но это хитрость и должна использоваться с осторожностью

Question 1?
A. SomeA1.
B. SomeB1.



В идеале, если мы знаем, какие отклонения мы можем найти в данных, мы можем очистить данные перед применением первого шаблона, как в следующем примере, где несколько пробелов заменяются одним пробелом.

Найти: (?<=\n)(\D{1}\.)(\s+)([^^]+?\n)
Замена: \1 \3

Вход (строка теста):

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


Выход (ЗАМЕНА):

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



Всё ещё ищете ответ? Посмотрите другие вопросы с метками .