正则表达式在大括号内查找单词

Regex to Find a Word Inside Curly Braces

我需要一种方法来使用 RegEx 搜索文本并在 Latex 命令中找到一个词(这意味着它在大括号内)

示例如下:

Tarzan is my name and everyone knows that {Tarzan loves Jane}

现在,如果您搜索正则表达式:({[^{}]*?)(Tarzan)([^}]*}) 并将其替换为 T~a~r~z~a~n

这将只替换花括号内的单词 Tarzan 并忽略其他实例!这是我到的为止。

现在我需要的是对以下示例做同样的事情:

Tarzan is my name and everyone knows that {Tarzan loves Jane} but she doesn't know that because its written with \grk{Tarzan loves Jane}

在此示例中,我只需要替换最后提到的 "Tarzan"(\grk{} 中的那个)

有人可以帮我修改上面的 RegEx 搜索以仅执行此操作吗?

你可以试试这个模式:

(?:\G(?!\A)|\grk{)[^}]*?\KTarzan

demo

详情:

(?:
    \G(?!\A)  # contiguous to a previous match
  |           # OR
    \grk{    # first match
)
[^}]*?        # all that is not a } (non-greedy) until ...
\K            # reset the start of the match at this position
Tarzan        # ... the target word

注意:\G匹配上一个匹配后的位置,但也匹配字符串的开头。那就是我添加 (?!\A) 以防止在字符串开头匹配。

或者您可以使用:\grk{[^}]*?\KTarzan 多次传递。