php - 文本转换 : Adding text according to previous occurrence

标签 php regex algorithm notepad++

我有一个包含以下格式的多个问题的文本:

Q1

Question text 1?

1. Answer A
2. Answer B (+1p)
3. Answer C
4. Answer D

Q2

Question Text 2?

1. Answer A (+1p)
2. Answer B
3. Answer C (+1p)
4. Answer D 

Q3

Question Text 3

1. Answer A
2. Answer B
3. Answer C (+1p)

正确答案标有 (+1p)。 我想重新格式化它,以便在新的一行中陈述正确的答案,如下所示:

Q1

Question text 1?

1. Answer A
2. Answer B
3. Answer C
4. Answer D
Answer: B

Q2

Question Text 2?

1. Answer A
2. Answer B
3. Answer C
4. Answer D 
Answer: A, C

Q3

Question Text 3

1. Answer A
2. Answer B
3. Answer C
Answer: C

这甚至可以在 Notepad++ 中完成吗?

最佳答案

救援正则表达式的魔力:

我们需要一个两步走的方法,

  1. 追加答案:

    • 查找内容: ((\R\d\.\h+Answer\h+[A-Z]+\h?(\(\+1p\))?)+)
    • 替换为: \1\r\n答案:
    • 检查正则表达式
    • 点击替换全部替换
  2. 现在我们收集答案:

    • 查找内容: Answer ([A-Z])\h\(\+1p\)(.*?Answer: [A-Z ]*)
    • 替换为: 回答\1\2\1
    • 检查正则表达式
    • 检查。匹配换行符
    • 点击替换全部替换。继续单击,一个 block 中有多个答案的情况需要与 block 中的答案一样多的全部替换。观察对话框状态栏中的消息。它会在您完成时告诉您。

在第一步中,查找尝试匹配完整的答案 block 并将其捕获到 \1 中。替换仅在 block 后添加一行。

第二步尝试(针对每个 block )捕获从第一个 (+1p)Answer: 的行。该发现使得 (+1p) not 已被识别。答案的 answer 字符 在\1 中捕获,以下答案直到 Answer: 行在\2 中捕获,我们附加 answer char 在 '\1' 到 'Answer:' 行。 (只需进行一些查找,查看匹配的内容,然后进行一些替换,以查看它如何与具有多个标记答案的 block 一起使用。您可以撤消以重播替换。)

关于php - 文本转换 : Adding text according to previous occurrence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860851/

相关文章:

php - 仅使用 php 或 css 如何保持单击提交按钮的颜色更改,即使页面重新加载

c - 检测 RE2C 中的 IP 地址

javascript - Ajax 成功函数逐字返回index.php

php - Laravel 作为客户端时,用于身份验证的 JWT 存储在哪里?

Java - 正则表达式搜索字符串

regex - 如何为正则表达式引擎生成最重的内容?

c - 查找数组中两个数字的目标和

c# - 计算 pow(45,60) mod 61

php - 在 PHP 中使用全局标题时设置页面标题

java - 在java中将字符串更改为驼峰式,同时包含下划线和数字