如何使用正则表达式提取子字符串

How to extract a substring using a regular expression

有这样一段文字: ...一些文字[错误答案\#正确answer\wrong答案]一些文字...

我需要弄清楚如何从方括号中的文本中提取两个子字符串(在不同的地方,即应该得到两个正则表达式):

  1. 所有错误答案都没有\
  2. 正确答案以#开头,但不包括\和#

同时,除了[ ], \, #之外的任何字符,可以是任意大小的字符串代替正确和错误的答案。 希望可能答案的数量不影响表达式。例如,可能有几个正确和不正确的答案。答案的顺序也可能会改变。 关于如何使用 regEx 执行此操作的任何想法?

为了确保我们有答案之一,我们需要检查它前面的符号是什么。为此,我们可以使用 Positive Lookbehind 像这样 (?<=Y)X。想法类似于“找到X,如果它前面有Y”。然后我们需要的只是获取所有不匹配特殊字符的文本,如 \#[] 使用 [^XYZ] 匹配除 XYZ.

要解决评论中的问题,我们还需要检查答案之后的下一步。有 2 个选项:\]。现在我们要使用 Positive Lookahead,它类似于 Lookbehind,但会检查 X 之后的文本。示例 X(?=Y) 表示“如果 X 后面有 Y,则找到 ”。

最终模式为:

  • 错误答案:(?<=\|\[)[^\#\[\]]+(?=\|\])
  • 正确答案:(?<=#)[^\#\[\]]+(?=\|\])