1

我有一个复杂的文本文件,这是其中的一部分:

& \multirow{2}{*}{52.7} & \multirow{2}{*}{3} & \multirow{2}{*}{$<$ 0.001}\\

我对后面的数字感兴趣{*}。这是我没有运气的尝试:

import re
m = re.findall(r'{\*}{(.+)}', '& \multirow{2}{*}{52.7} & \multirow{2}{*}{3} & \multirow{2}{*} $<$ 0.001}\\')

但是,我得到以下结果:

['52.7} & \\multirow{2}{*}{3} & \\multirow{2}{*}{$<$ 0.001']

我尝试了许多其他组合,但我要么得到第一个数字(例如 52.7),要么得到中间数字(3)或以上。我怎样才能进入52.7, 3, $<$ 0.001一个组(列表)。

4

3 回答 3

3

这是因为默认情况下+*运营商是贪婪的。改为使用非贪婪修改:

{\*}{(.+?)}

参考:http ://www.regular-expressions.info/repeat.html (“小心贪婪! ”部分)

于 2012-12-15T23:28:30.367 回答
1

使用以下正则表达式:

\{\*\}\{(.*?)\}

您应该使用反斜杠转义所有特殊字符,\并在结果集的子类中使用非贪婪通配符.*?

于 2012-12-15T23:28:52.270 回答
1
m = re.findall(r'({\*}{([\d|\.?]+?)})+', '& \multirow{2}{*}{52.7} & \multirow{2}{*}{3} & \multirow{2}{*} $<$ 0.001}\\')
[('{*}{52.7}', '52.7'), ('{*}{3}', '3')]

m = re.findall(r'{\*}{([\d|\.?]+?)}+', '& \multirow{2}{*}{52.7} & \multirow{2}{*}{3} & \multirow{2}{*} $<$ 0.001}\\')
['52.7', '3']

m = re.findall(r'{\*}{(.*?)}', '& \multirow{2}{*}{52.7} & \multirow{2}{*}{3} & \multirow{2}{*} $<$ 0.001}\\')
['52.7', '3', '$<$ 0.001']
于 2012-12-15T23:30:35.133 回答