LINUX.ORG.RU

[Python] Ещё один топик про регекспы

 


0

0

А можно ли как-то красивым методом получить из строчки вида {{asdfgh::qwerty}} эти самые asdfgh и qwerty?

Хотелось бы решение на уровне s1, s2 = func("{{asdfgh::qwerty}}")

Буду рад, если хотя бы посоветуете литературу на эту тему. Англоязычные туторы по регекспам что-то не перевариваю.

★★★★★

def ParseMsg(msg):
    reg=r"\{\{([^\{\}:]+)::([^\{\}:]+)\}\}"
    res=re.finditer(reg,msg)
    msgs=[]
    for match in res:
        msgs.append(match.groups())
    return msgs


>>> ParseMsg("{{hello::world}}")
[('hello', 'world')]
>>> ParseMsg("{{hello::world}}{{123::asdf}}")
[('hello', 'world'), ('123', 'asdf')]

Екзампли — жутко полезная штука (:

PolarFox ★★★★★
() автор топика

func = re.compile(r'{{(.*?)::(.*?)}}').findall

DonkeyHot ★★★★★
()

David Mertz Text Processing In Python

Leron ★★
()
Ответ на: комментарий от imp

И ещё немного:

s1, s2 = "{{asdfgh::qwerty}}".strip('{}').split('::')

Кстати, если что этот вариант, скорее всего, работает значительно быстрее регэкспов.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

Только вот вариант с регекспами умеет разбирать строчки с более чем одной такой комбинацией и при этом более спокойно реагирует на мусор у входа.

Скорость в моём случае очень некретична.

PolarFox ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.