Найти - Пользователи
Полная версия: замена двойного символа
Начало » Python для новичков » замена двойного символа
1 2
Genabox
раз два III* четыре пять - зайчик vIshel pogulat
раз два (дата3) четыре пять - зайчик v(дата2)shel pogulat
xam1816
Genabox
поэтому при замене все букв по азбуке римские цифры нужно видить как 1 символ для замены - я его пометил звездочкой для этого
так одной звездочки мало для этого, ты html код видел? или даже на этом форуме код думаешь почему в рамке появляется, потому что он в тегах с двух сторон
[code python]так понятно что это код, а не текст[/code]
Genabox
да у меня вопрос по логике а не покоду
xam1816
Genabox
да у меня вопрос по логике а не покоду
я тебе про логику и говорю, почему ты делаешь III*, а не к примеру <tag>III</tag>

  
import re
dct = {
    'III\*': '(data3)',
    'I': '(data2)',
}
s = 'раз два III* четыре пять - зайчик vIshel pogulatIII*'
def process(text, dct):
    for k, v in dct.items():
        text = re.sub(k, v, text)
    return text
print(s)
res = process(s, dct)
print(res)

 
раз два III* четыре пять - зайчик vIshel pogulatIII*
раз два (data3) четыре пять - зайчик v(data2)shel pogulat(data3)
Genabox
списибо
не работает это именно то о чем я испрашивал
как написать правило объхода замены символа

 import re
dct = {
    'I': '(data2)',
    'I I I / *': '(data3)'
    
}
s = 'р а з д в а I I I * ч е т ы р е п я т ь   -   з а й ч и к  v I s h e l   p o g u l a t I I I *'
def process(text, dct):
    for k, v in dct.items():
        text = re.sub(k, v, text)
    return text
print(s)
res = process(s, dct)
print(res)

р а з д в а I I I * ч е т ы р е п я т ь - з а й ч и к v I s h e l p o g u l a t I I I *
р а з д в а (data2) (data2) (data2) * ч е т ы р е п я т ь - з а й ч и к v (data2) s h e l p o g u l a t (data2) (data2) (data2) *

<tag>III</tag>
ну оно раздолбает этот таг по символам….

еще у меня в коде используется правило пробел между символами и 2 пробела между словами (для транслитизации в экзо азбуку)
xam1816
Genabox
ну оно раздолбает этот таг по символам….
перед обработкой строку можно привести в нормальный вид

код который я скинул не многофункциональный, в словаре должна строгая последовательность, что в первую очередь меняется, что во вторую

  
import re
dct = {
    'I I I \*': '(data3)',
    'I': '(data2)',
}
s = 'р а з д в а I I I * ч е т ы р е п я т ь   -   з а й ч и к  v I s h e l   p o g u l a t I I I *'
def process(text, dct):
    for k, v in dct.items():
        text = re.sub(k, v, text)
    return text
print(s)
res = process(s, dct)
print(res)
 
р а з д в а I I I * ч е т ы р е п я т ь - з а й ч и к v I s h e l p o g u l a t I I I *
р а з д в а (data3) ч е т ы р е п я т ь - з а й ч и к v (data2) s h e l p o g u l a t (data3)

Process finished with exit code 0
Genabox
что в первую очередь меняется, что во вторую
так и есть
Genabox
 import re
dct = {
    'I I I': '(data3)',
    'I': '(data2)',
}
s = 'I р а з д в а I I I ч е т ы р е п я т ь   -   з а й ч и к  v I s h e l   p o g u l a t I I I '
def process(text, dct):
    for k, v in dct.items():
        text = re.sub(k, v, text)
    return text
print(s)
res = process(s, dct)
print(res)

I р а з д в а I I I ч е т ы р е п я т ь - з а й ч и к v I s h e l p o g u l a t I I I
(data2) р а з д в а (data3) ч е т ы р е п я т ь - з а й ч и к v (data2) s h e l p o g u l a t (data3)

да так работает, я не понимаю как он это распознает

тоесть получается что в словаре нужно весь римский алфавит писать перед основным алфавитом?
Genabox
нужно искать текст между тэгами и его заменять
а потом заенять все остальное за исключением этих тэгов

например <rom>I</rom>

спасибо за помощь, еще потом покопаю
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB