在关键字后面搜索{}中嵌入的字符串

时间:2015-11-20 22:47:51

标签: python regex

如何在关键字后面的{}中嵌入字符串,其中关键字与大括号{}之间的字符数未知。 e.g:

includegraphics[x=2]{image.pdf}

关键字是includegraphics,要找到的字符串是image.pdf,但[x=2]之间的文本可以在两个[]之间有任何内容。 所以我想忽略关键字和{之间的所有字符,或者我想忽略[]

之间的所有内容

2 个答案:

答案 0 :(得分:2)

使用re.findall

>>> sample = 'includegraphics[x=2]{image.pdf}'
>>> re.findall('includegraphics.*?{(.*?)}',sample)
['image.pdf']

<强>解释

re module处理Python中的正则表达式。它的findall方法可用于查找字符串中模式的所有出现。

您感兴趣的模式的正则表达式为'includegraphics.*?{(.*?)}'。这里.表示&#34;任何字符&#34;,而*表示0次或更多次。问号使这成为一种非贪婪的操作。来自文档:

  

*+?限定符都是贪婪的;他们匹配得那么多   文本尽可能。有时这种行为是不可取的;如果有   <.*><H1\>title</H1>匹配,它将与整个匹配   字符串,而不仅仅是<H1>。在限定符之后添加?   以非贪婪或极简的方式进行比赛;少数人物   尽可能匹配。在前一个表达式中使用.*?将   仅匹配<H1>

请注意,虽然在您使用.*?的情况下应该没问题,但一般来说,使用更专业的字符组(例如\w代表字母数字和\d)会更好数字,当您知道内容将提前包含的内容时。

答案 1 :(得分:0)

使用re.search

re.search(r'includegraphics\[[^\[\]]*\]\{([^}]*)\}', s).group(1)