如何使用正则表达式提取子字符串
How to extract a substring using a regular expression
有这样一段文字:
...一些文字[错误答案\#正确answer\wrong答案]一些文字...
我需要弄清楚如何从方括号中的文本中提取两个子字符串(在不同的地方,即应该得到两个正则表达式):
- 所有错误答案都没有\
- 正确答案以#开头,但不包括\和#
同时,除了[ ], \, #之外的任何字符,可以是任意大小的字符串代替正确和错误的答案。
希望可能答案的数量不影响表达式。例如,可能有几个正确和不正确的答案。答案的顺序也可能会改变。
关于如何使用 regEx 执行此操作的任何想法?
为了确保我们有答案之一,我们需要检查它前面的符号是什么。为此,我们可以使用 Positive Lookbehind
像这样 (?<=Y)X
。想法类似于“找到X,如果它前面有Y”。然后我们需要的只是获取所有不匹配特殊字符的文本,如 \
、#
、[
或 ]
使用 [^XYZ]
匹配除 X
、Y
和 Z
.
要解决评论中的问题,我们还需要检查答案之后的下一步。有 2 个选项:\
或 ]
。现在我们要使用 Positive Lookahead,它类似于 Lookbehind,但会检查 X
之后的文本。示例 X(?=Y)
表示“如果 X 后面有 Y,则找到 ”。
最终模式为:
- 错误答案:
(?<=\|\[)[^\#\[\]]+(?=\|\])
- 正确答案:
(?<=#)[^\#\[\]]+(?=\|\])
有这样一段文字: ...一些文字[错误答案\#正确answer\wrong答案]一些文字...
我需要弄清楚如何从方括号中的文本中提取两个子字符串(在不同的地方,即应该得到两个正则表达式):
- 所有错误答案都没有\
- 正确答案以#开头,但不包括\和#
同时,除了[ ], \, #之外的任何字符,可以是任意大小的字符串代替正确和错误的答案。 希望可能答案的数量不影响表达式。例如,可能有几个正确和不正确的答案。答案的顺序也可能会改变。 关于如何使用 regEx 执行此操作的任何想法?
为了确保我们有答案之一,我们需要检查它前面的符号是什么。为此,我们可以使用 Positive Lookbehind
像这样 (?<=Y)X
。想法类似于“找到X,如果它前面有Y”。然后我们需要的只是获取所有不匹配特殊字符的文本,如 \
、#
、[
或 ]
使用 [^XYZ]
匹配除 X
、Y
和 Z
.
要解决评论中的问题,我们还需要检查答案之后的下一步。有 2 个选项:\
或 ]
。现在我们要使用 Positive Lookahead,它类似于 Lookbehind,但会检查 X
之后的文本。示例 X(?=Y)
表示“如果 X 后面有 Y,则找到 ”。
最终模式为:
- 错误答案:
(?<=\|\[)[^\#\[\]]+(?=\|\])
- 正确答案:
(?<=#)[^\#\[\]]+(?=\|\])