正则表达式在数学方程中的所有下划线周围添加空格(`$ ... $`)

问题描述 投票:0回答:1

我试图匹配数学方程中包含的所有下划线,周围是数学分隔符

$
,并在它们周围添加空格。

例如,在数学方程中:

$(x_0, x_1, \dots, x_n)$

我想要的最终结果是

$(x _ 0, x _ 1, \dots, x _ n)$

到目前为止,我已经想出了一个正则表达式

\$([^\$]*)_([^\$]*)\$

并尝试用

$$1 _ $2$
替换。

它可以工作,但只匹配一个下划线。在上面的例子中,我得到了

$(x_0, x_1, \dots, x _ n)$

有没有办法匹配每个

_
并一次性全部替换为
_
?如果这在正则表达式中不可能,我想我将不得不寻找其他方法。

PS。我需要这个的原因是因为 Markdown 解析器有时会匹配

_
作为强调并破坏数学方程的格式。如果有人知道对此的有效解决方法(除了使用
\_
- 我使用黑曜石,这会破坏方程),那也很好。

regex
1个回答
0
投票

在 VSCode 中,它支持单文件搜索中的非固定宽度后视(由于某种原因全局搜索不支持),这意味着您可以使用以下正则表达式来定位由数学分隔符括起来的下划线

$( ... )$

(?<=\$\((?:(?!\)\$).)*)\s?_\s?(?=(?:(?!\$\().)*\)\$)

并将其替换为

 _ 

这是演示

(?<=\$\((?:(?!\)\$).)*)  # lookbehind, `$(` without encountering `)$`
\s?_\s?                  # underscore, with optional whitespaces around it
(?=(?:(?!\$\().)*\)\$)   # lookahead, `)$` without encountering `$(`
© www.soinside.com 2019 - 2024. All rights reserved.