Как я могу изменить
a = "[ruby(空,ruby=そら)]は[ruby(青,ruby=あお)]い。"
в
"空は青い。"
?
Я пытался
re.sub(r"\[ruby\(.,ruby=.\)\]",".",a)
но вообще не работает.
Теперь это возвращается ".い。"
.
Ты заменил все .
?
Я пробовал re.sub(r"\[ruby\(.*,ruby=.*\)\]",".",a)
Хорошо, забудьте мой предыдущий комментарий, попробуйте это: re.sub(r"[\[\]\(\)=A-z]","",a)
Результатом является '空そらは青あおい。'
, и это не удаляет японские символы после "ruby = "
(это "そら"
и "あお"
).
Я думаю, что это хороший: \[ruby\(|,ruby=[^\)]+|[\)\]]
. Кстати, я использую этот сайт для тестирования своего регулярного выражения (есть режим Python): regex101.com
Теперь это работает. Спасибо за сайт
У вас есть 2 способа добиться того, чего вы хотите: заменить то, что не принадлежит конечной строке, ничем или отследить строку, которую вы хотите сохранить (и то, и другое можно сделать благодаря регулярному выражению);)
Данный:
a = "[ruby(空,ruby=そら)]は[ruby(青,ruby=あお)]い。"
desired = "空は青い。"
Вы можете использовать изменение, чтобы удалить подстроки:
>>> s=re.sub(r'\[ruby\(|,ruby=[^)]+\)\]','',a)
>>> s
空は青い。
>>> s==desired
True
Вы можете использовать
a = re.sub(r'\[ruby\(([^(),]*),[^()]*\)]', r'\1', a)
Посмотрите демонстрацию регулярного выражения . Подробности:
\[ruby\(
- [ruby(
текст([^(),]*)
- Группа 1: любой текст, кроме (
, )
и запятой, ноль или более вхождений,
- запятая[^()]*
- ноль или более символов, кроме (
и )
\)]
- текст )]
.Посмотрите демонстрацию Python:
import re
a = "[ruby(空,ruby=そら)]は[ruby(青,ruby=あお)]い。"
print( re.sub(r'\[ruby\(([^(),]*),[^()]*\)]', r'\1', a) )
# => 空は青い。
Попробуйте с
.*
или.+