Sublime Text - 正则表达式用于查找和替换

21

我希望使用正则表达式的查找和替换功能,将以下文本:

"some text i dont care about \cite[p. 6]{some-bibtex-citation} some more text I care even less about \cite[p. 321 / 4]{and-another-citation-from-bibxtex} and still more text."

转换为:

"some text i dont care about [\citem{author}{some-bibtex-citation}, p. 6] some more text I care even less about [\citem{author}{and-another-citation-from-bibxtex}, p. 321 / 4] and still more text."

可以看出,所有的\cite都被替换成了一个不同的字符串。它们现在被括在方括号中,并且它们都以[citem {author}开头。

我尝试使用以下查找正则表达式,基本上是有效的,但有时会选择太多文本:

\\cite\[(.+)\]\{(.+)\}

我用于替换的正则表达式是:

[\\citem{author}{\2}, \1]

“但是可以一次选择太多文本”是什么意思? - Jerry
1
应该选择直到闭合的大括号为止。例如:应该在-citation}后停止,但它会选择之后的文本("some more text ...") - user35938
1个回答

35

改变你的正则表达式,使得.+变为懒惰匹配:

\\cite\[(.+?)\]\{(.+?)\}
           ^        ^
让贪婪量词变成懒惰量词意味着它不再尽可能地匹配,而是尽可能地少匹配。在你当前的正则表达式中,.将匹配所有字符,直到找到另一个)(后面跟着正则表达式中的其他字符)。
或者使用否定类:
\\cite\[([^\]]+)\]\{([^}]+)\}

3
有些人可能会将这种"懒惰"求值称为非贪婪的求值。 - Matthias
1
否定的类是我使用情况所需的。谢谢! - Colin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接