Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从\cite命令中提取bibtex键的正则表达式_Regex - Fatal编程技术网

Regex 从\cite命令中提取bibtex键的正则表达式

Regex 从\cite命令中提取bibtex键的正则表达式,regex,Regex,我试图创建一个正则表达式,它从tex文档中的cite命令中提取bibtex键。它应该能够将完整的latex文档作为输入字符串,并将所有bibtex键作为匹配项返回: Blahbla document \somecommand{test} blabla nonsense lorem ipsum \cite{key1} and \cite{key2, key3, key4} 返回 key1 key2 key3 key4 我是用以下方法得出这个结论的: 它可以工作,除了在第二个\cite命令中只有

我试图创建一个正则表达式,它从tex文档中的cite命令中提取bibtex键。它应该能够将完整的latex文档作为输入字符串,并将所有bibtex键作为匹配项返回:

Blahbla document
\somecommand{test} blabla nonsense lorem ipsum \cite{key1} and \cite{key2, key3, key4}
返回

key1
key2
key3
key4
我是用以下方法得出这个结论的:

它可以工作,除了在第二个\cite命令中只有key2和key4被标识为匹配之外


谁能解释一下这里出了什么问题以及应该如何做?提前谢谢

要进行连续字符串匹配,需要使用
\G
锚定

(?:\\cite\{|(?<!^)\G),?\s*([^,}]+)
(?:\\cite\{124;)(?)?
或

(?:\\cite\{124;)(?)?

因为
*
是贪婪的,它尽可能匹配所有字符。对不起,我应该提到我使用的是python。在这种情况下,两种解决方案都失败了……是什么让python的行为不同呢?@jkokokian总是包含您首先运行的lang的标记。re模块不支持
\G
锚。您不需要o使用正则表达式模块。
(?:\\cite\{|(?<!^)\G),?\s*([^,}]+)
(?:\\cite\{|(?<!^)\G),?\s*([^,}]+)(?=[^}]*})