0

次の文字列があります(変数名が「str」であるとします)

(((TEST (4 5 17 33 38 45 93 101 104 108 113 116 135 146 148)) (TRAIN (0 1 2 3 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 94 95 96 97 98 99 100 102 103 105 106 107 109 110 111 112 114 115 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 136 137 138 139 140 141 142 143 144 145 147 149 150 151))) ((TEST (19 35 46 47 48 56 59 61 65 69 71 84 105 107 130)) (TRAIN (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 49 50 51 52 53 54 55 57 58 60 62 63 64 66 67 68 70 72 73 74 75 76 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 106 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151)))'

そこから取得したい

['TEST (4 5 17 33 38 45 93 101 104 108 113 116 135 146 148)', 'TEST (19 35 46 47 48 56 59 61 65 69 71 84 105 107 130)']

Python で re.findall() 関数を使用します。

私は次のことを試しました

m = re.findall(r'TEST\s\((\d+\s?)*\)', str)

私は結果を得る

['148', '130']

これは、必要な数値の各セットの最後の数値のみのリストです。正規表現が間違っている理由がわかりません。誰かがこの問題を解決するのを手伝ってくれますか?

ありがとう!

4

3 に答える 3

0

使用できます(間の数字を気にする必要はありません):

import re
print re.findall(r'\((TEST.*?\))\)', s)
['TEST (4 5 17 33 38 45 93 101 104 108 113 116 135 146 148)', 'TEST (19 35 46 47 48 56 59 61 65 69 71 84 105 107 130)']
于 2013-08-20T16:41:07.233 に答える
0

これを試してみてください。TEST閉じ括弧までのすべての文字に一致し、そこで停止した後( [^)]+):

re.findall(r'\((TEST[^)]+\))', s)

次の結果が得られます。

['TEST (4 5 17 33 38 45 93 101 104 108 113 116 135 146 148)',
 'TEST (19 35 46 47 48 56 59 61 65 69 71 84 105 107 130)']
于 2013-08-20T16:43:37.883 に答える