我有这样一个python正则表达式:
re.compile(r'(\[chartsjs\].*\[/chartsjs\])', re.DOTALL)
我正在尝试对如下模式进行re.findall
:
但它似乎将第一个[charts]
与最后一个[charts]
匹配,并从中间抓取所有内容,因为当我将其打印到控制台时,我看到的是:
[u'[chartsjs]\r\nname: mychart\r\ntype: line\r\nlabels: fish, cat, dog\r\ndata: 4, 5, 6\r\ndata2:5, 7, 9\r\n[/chartsjs]\r\n\r\nthis is some text now fool\r\n\r\n[chartsjs]\r\nname: second\r\ntype: line\r\nlabels: 100, 500, 1000\r\ndata: 50, 100, 10000\r\ndata2: 100, 100, 100\r\n[/chartsjs]']
我希望正则表达式返回第一个匹配项,消除任意测试,然后找到另一个任意数量的匹配项。有办法吗?在
这里最重要的是你想把.*变成.*?。正如其他人所回答的,还有其他优化正则表达式的方法,但我认为你问题的根源是你想匹配所有的东西,直到你看到那[/charts]模式,哪个?会给你的。在
你的正则表达式只有一个问题。在
.*
将贪婪地匹配其路径上的所有内容。当它遇到第一个结束符[/charts]
时,它将进一步检查前面是否还有{为了让它一开始停止}
[/charts]
,我们需要加个问号使它变懒。.*?
这将继续匹配所有内容并在第一个位置停止{看看我测试过了:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐