使用 Edit Pad Pro 或 Notepad++ 删除重复的段落

使用 Edit Pad Pro 或 Notepad++ 删除重复的段落

我有一个.docx 文件,其中包含以下格式的多项选择题。问题是其中有很多重复的多项选择题,因此我想知道是否可以创建一个正则表达式来检测所有重复的多项选择题。

我有 Edit Pad Pro 7、Notepad++、powergrep 和 sublime text。到目前为止,我使用的所有正则表达式都会逐行删除重复项,从而删除其他问题的选项,即使问题不匹配。

所以基本上我要说的是,我需要一个正则表达式,只有当整个 mcq 匹配时,它才能删除所有重复的 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.

答案1

  • Ctrl+H
  • 找什么:(([^?]+\?\R(?:.+\.\R)+)[\s\S]+?)\2
  • 用。。。来代替:$1
  • 检查环绕
  • 检查正则表达式
  • 请勿检查. matches newline
  • Replace all

解释:

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

答案2

从技术上讲,给定的输入中没有重复项,因为“A. 颊黏膜。”和“A. 颊黏膜。”在“A.”后的空格数不同。

然而,直觉表明这种情况应该以某种方式被发现。

正如你在评论中提到的,你正在使用https://regex101.com/我将使用此网页进行匹配和替换。
我选择了风格: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.

输出(SUBSTITUTION)://删除一个重复项

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.

输出(SUBSTITUTION)://看起来不错,但这是一个技巧,必须谨慎使用

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.


在此处输入图片描述

相关内容