Как re.findall может быть использован для такой строки, как "{asctime} _ {|} {level} _ {|} {name} __ {>>} {message}" - PullRequest
0 голосов
/ 13 марта 2020

У меня есть простая строка, подобная этой:

s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

Я хочу использовать регулярное выражение для преобразования его в следующее (сохраняя пробелы), вероятно, используя re.findall:

[
"{asctime} _{|}",
" {level} _{|}",
" {name} __{>>}",
" {message}"
]

Как это можно сделать?

Вот где я должен:

re.findall(r'\{.\}', s)

Ответы [ 4 ]

2 голосов
/ 13 марта 2020

Это похоже на работу

import re

s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

re.split(r"\B(?= {)", s)

возвращает

['{asctime} _{|}', ' {level} _{|}', ' {name} __{>>}', ' {message}']
2 голосов
/ 13 марта 2020

здесь вы go:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

p = re.compile(r'(\s?\{\w*\}[\s_]*(\{([|]*|[>]*)\})?)')
s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

new_s = "\n".join([x[0] for x in re.findall(p, s)])

для целей тестирования я использую regex101.com

1 голос
/ 13 марта 2020

Вы также можете использовать шаблон без групп захвата:

{[^}]+}(?: (?:_{\|}|__{>>}))?

Объяснение

  • {[^}]+} Совпадение {, 1+ раз любое символ, отличный от { и соответствующий }
  • (?: Группа без захвата
    • (?: Совпадение с пробелом и начало группы без захвата для чередования
      • _{\|} Матч _{|}
      • | или
      • __{>>} Матч __{>>}
    • ) Закрыть группу
  • )? Закрыть группу и сделать ее необязательной

Regex demo | Python демо

Пример кода

regex = r"{[^}]+}(?: (?:_{\|}|__{>>}))?"
s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

print(re.findall(regex, s))

Выход

['{asctime} _{|}', '{level} _{|}', '{name} __{>>}', '{message}']
0 голосов
/ 13 марта 2020

на самом деле не регулярное выражение, но это делается:

import re

s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

ting = str(re.sub("} {", "}${", s).split("$"))
ting = re.sub(", ", ",\n", ting)
ting = re.sub("\[", "[\n", ting)
ting = re.sub("]", "\n]", ting)

print(ting)
# [
# '{asctime} _{|}',
# '{level} _{|}',
# '{name} __{>>}',
# '{message}'
# ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...