Используйте Regex для подсчета преемника нуля для строки - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть проект, в котором мне нужно преобразовать строку с некоторыми правилами.

строка: "9: (play alice bob (s (s z)) (s (s (s z))))"

Чтобы преобразовать ее, просто удалите часть (s (sz)) и вместо этого посчитайте их как преемник нуля. Например,

z = 0

(sz) = 1

(s (sz)) = 2

Итак, строка "9: (play alice bob (s (s z)) (s (s (s z))))" --> "9: (play alice bob 2 3"

Пробовал

Я уже пробовал некоторые вещи с помощью регулярных выражений, но не смог найти ничего, что дало бы мне правильный ответ. То, что я до сих пор пробовал, это.

re.findall(r"\((.+)\)",line)[0] --> play alice bob (s (s z)) (s (s (s z)))

, и если я сделаю это снова на струне внутри

re.findall(r"\((.+)\)",line)[0] --> s (s z)) (s (s (s z))

Не действительно есть идеи, как исходить из этой части или если есть что-то более простое.

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете посчитать количество вхождений s в \([sz].*?\).

s = "9: (play alice bob (z) (s (s z)) (s (s (s z))))"
re.sub(r"\([sz].*?\)", lambda m: str(m.group().count("s")), s).replace(")", "") + ")"

Результат:

9: (play alice bob 0 2 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...