2015-11-20 45 views
2

如何在关键字之后获得{}中嵌入的字符串,其中关键字和大括号{}之间的字符数未知。 例如为:在关键字后搜索{}中嵌入的字符串

includegraphics[x=2]{image.pdf} 

的关键词将是includegraphics和字符串被发现是image.pdf,但在[x=2]之间的文本,可以有两个[]之间的任何东西。 所以我想忽略的关键字和{之间的所有字符或我想忽略[]

+0

我真的不明白你想要做什么。如果你只是想提取image.pdf,你可以使用indexOf。 – JonathanG

回答

2

使用re.findall

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

说明

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

您感兴趣的模式的正则表达式为'includegraphics.*?{(.*?)}'。这里.代表“任何字符”,而*代表0或更多次。问号使这是一个非贪婪的操作。从文档:

*+,并且?预选赛都是贪婪的;它们尽可能地匹配文本。有时候这种行为是不希望的;如果RE <.*>是针对<H1\>title</H1>匹配,它会匹配整个 字符串,而不仅仅是<H1>。添加?限定符使得后 执行非贪婪或最小的方式匹配;尽可能少的字符 将被匹配。在前面的表达式将 比赛只<H1>使用.*?

请注意,虽然在使用.*?应罚款的情况下,一般最好还是使用更专业的字符组如\w的字母数字和\d的数字,当你知道什么内容将会包括提前。

+0

或者更好,使用[*展开循环*](http://www.softec.lu/site/RegularExpressions/UnrollingTheLoop)技术,可以让你处理非常大的输入文本。然而,有些东西让我认为否定字符类应该在这里工作得更好。看一看['includegraphics [^ {] * {([^}] *)}'](https://regex101.com/r/lO5aJ7/1)。 –

0

之间的一切使用re.search

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