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 に答える