4

テキスト内でこれらの「タグ」を探しています:{t d="var1"}var2{/t}または{t d="varA"}varB{/t} より多くの属性がある可能性があり、「d」のみが必須です:{t d="var1" foo="bar"}var2{/t}

私の問題は、1行にさらにタグがある場合、すべてではなく1つの結果のみが返されることです。返されるもの(以下のテスト文字列から): (u'single1', u'Required item3')

私が返されることを期待するもの: (u'single1', u'required1') (u'single2', u'Required item2') (u'single3', u'Required item3') 私はこれで立ち往生しました。1行に1つのタグで機能しますが、1行にそれ以上のタグでは機能しません。

# -*- coding: UTF-8 -*-
import re

test_string = u'''
<span><img src="img/ico/required.png" class="icon" alt="{t d="single1"}required1{/t}" title="{t d="single2"}Required item2{/t}" /> {t d="single3"}Required item3{/t}</span>
'''


re_pattern = '''
    \{t[ ]{1}       # start tag name
    d="         # "d" attribute
    ([a-zA-Z0-9]*)      # "d" attribute content
    ".*\}       # end of "d" attribute
    (.+)        # tag content
    \{/t\}      # end tag
'''
rec_pattern = re.compile(re_pattern, re.VERBOSE)

res = rec_pattern.findall(test_string)
if res is not None:
    for item in res:
        print item
4

1 に答える 1

13

あなたのワイルドカードは貪欲です。.*それらを からに変更して、.*?貪欲にならないようにします。

re_pattern = '''
    \{t[ ]{1}           # start tag name
    d="                 # "d" attribute
    ([a-zA-Z0-9]*)      # "d" attribute content
    ".*?\}              # end of "d" attribute
    (.+?)               # tag content
    \{/t\}              # end tag
'''
于 2013-01-06T13:17:34.510 に答える