81

これは、私が実行しているものよりも簡単でなければなりません。私の問題は、次のような文字列を回すことです:

ABC12DEF3G56HIJ7

の中へ

12 * ABC
3  * DEF
56 * G
7  * HIJ

そして、私の人生では、REGEX マッチングを使用して正しいループのセットを設計することはできません。[A-Z]問題の核心は、コードが完全に一般的でなければならないということです。なぜなら、フラグメントの長さもフラグメントの長さも想定できないから[0-9]です。

ご協力ありがとうございます。

4

2 に答える 2

131

Pythonはあなたのre.findallために働くはずです。

ライブデモ

import re

s = "ABC12DEF3G56HIJ7"
pattern = re.compile(r'([A-Z]+)([0-9]+)')

for (letters, numbers) in re.findall(pattern, s):
    print(numbers, '*', letters)
于 2012-10-13T05:20:19.737 に答える
77

re.finditerデータセットが大きい場合は、メモリ消費量が削減されるため、使用することをお勧めします (findall()すべての結果のリストを返し、finditer()それらを 1 つずつ検索します)。

import re

s = "ABC12DEF3G56HIJ7"
pattern = re.compile(r'([A-Z]+)([0-9]+)')

for m in re.finditer(pattern, s):
    print m.group(2), '*', m.group(1)
于 2016-07-28T01:11:31.867 に答える