如何用Python正则表达式匹配LaTeX文档中的文档类名
解决LaTeX文档类的正则匹配问题
你的问题出在正则里的.*是贪婪匹配——它会尽可能多地抓取字符,直到遇到最后一个},这就导致匹配范围超出了预期的myclass。
要修复这个问题,有两种实用的方法:
方法1:使用非贪婪量词.*?
把贪婪的.*改成非贪婪的.*?,它会匹配到第一个}就停止,完美贴合需求:
import re latex_text = "blank \\documentclass{myclass} words, more text \\documentclassdoc{11} more words" s = re.search(r'\\documentclass{(?P<class_name>.*?)}', latex_text) if s: print(s.group('class_name')) # 输出: myclass
方法2:匹配非}的字符
更精准的方式是直接匹配所有不是}的字符,用[^}],从根源上避免过度匹配:
import re latex_text = "blank \\documentclass{myclass} words, more text \\documentclassdoc{11} more words" s = re.search(r'\\documentclass{(?P<class_name>[^}]*)}', latex_text) if s: print(s.group('class_name')) # 输出: myclass
另外要注意:你原代码里的斜杠是/,但LaTeX命令里的是\,所以在Python字符串的正则里需要用双反斜杠\\来转义(因为Python本身会把单个反斜杠当作转义符),我已经在示例里修正了这个细节。
内容的提问来源于stack exchange,提问作者Kritz
相关产品推荐
相关产品推荐

