如何在关键字之后获得{}
中嵌入的字符串,其中关键字和大括号{}
之间的字符数未知。 例如为:在关键字后搜索{}中嵌入的字符串
includegraphics[x=2]{image.pdf}
的关键词将是includegraphics和字符串被发现是image.pdf,但在[x=2]
之间的文本,可以有两个[]
之间的任何东西。 所以我想忽略的关键字和{
之间的所有字符或我想忽略[]
如何在关键字之后获得{}
中嵌入的字符串,其中关键字和大括号{}
之间的字符数未知。 例如为:在关键字后搜索{}中嵌入的字符串
includegraphics[x=2]{image.pdf}
的关键词将是includegraphics和字符串被发现是image.pdf,但在[x=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
的数字,当你知道什么内容将会包括提前。
或者更好,使用[*展开循环*](http://www.softec.lu/site/RegularExpressions/UnrollingTheLoop)技术,可以让你处理非常大的输入文本。然而,有些东西让我认为否定字符类应该在这里工作得更好。看一看['includegraphics [^ {] * {([^}] *)}'](https://regex101.com/r/lO5aJ7/1)。 –
之间的一切使用re.search
re.search(r'includegraphics\[[^\[\]]*\]\{([^}]*)\}', s).group(1)
我真的不明白你想要做什么。如果你只是想提取image.pdf,你可以使用indexOf。 – JonathanG