从Python中的通用函数代码中提取参数

3

在这个特定的情况下,我想提取一个latex命令的参数,如下:

... latex code ...
\bibitem{item1} 
... latex code ...
\bibitem{item2}
... latex code ...

在Python中是否有一个函数可以检索包含item1、item2等的列表?

我想像中的代码可能是这样的:

latex_text.extract_argument("\bibitem{","}")

一个能够扫描文本并返回两个定界符之间包含的每个参数列表的函数。

1
你确定不用一些bibtex命令或输出更好吗?如果不知道你为什么要这样做,很难肯定地说,但我认为您可能希望寻找其他实现目标的方法。首先,如果item1包含使用}的命令,则正则表达式答案将不足以满足要求,因为您需要计算打开和关闭括号以找到关闭bibitem命令的那个。您有查看过bibtex生成的.bbl文件吗? - Lauritz V. Thaulow
也许这个链接是你需要的? - Lauritz V. Thaulow
感谢您的笔记。对于我们大多数文章而言,Bibtex太麻烦了,因为它们都很短且没有很多重复引用。我们只是想要一些快速的代码来检查参考文献是否都被引用并且引用顺序正确。你提到item1有一个"}"是正确的,但这种情况是不可能发生的,因为latex代码不允许这样。无论如何,如果能够轻松解析匹配括号之间的参数将会很好,但这是另一个问题了。我的简单代码可以在这里找到: http://leandro.iqm.unicamp.br/order_refs.py。我认为它运行良好。 - leandro
2个回答

3
import re

re.findall(r'\\bibitem\{(.*?)\}', latex_text)     # ['item1', 'item2']

2
使用 re.search
import re

l = '\\bibitem{item1}'
m = re.search(r'\{([^}]*)\}', l)
print m.group(1) # => 'item1'

正则表达式\{([^}]*)\}的解释:

  1. 我们正在寻找一个起始的{,我们必须将其转义为\{
  2. 我们使用一个包含的组(...),其中包含
  3. 任意数量的不是}的字符([^}]

第2步中的组是m.group(1)


1
非常好,感谢您对正则表达式的解释,这将非常有帮助。 - leandro

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