Poprawianie błędów.

0

Chcę napisać program, kóry będzie poprawiał błędy w pliku testowym postaci TOmek--> Tomek, EUropa--> Europa, jeśli natomiast wyraz ma dwie litery program ma zapytać użytkownika czy chce tę drugą literę zamienić. Wydaje mi, się że jestem blisko. Ale mam trudności, jak określić w re.sub (muszę tego użyć ) aby zamieniał drugą literę. Mam coś takiego:




with open("poprawa_wielkie_drugie_litery", 'r') as f:
   text=f.read()

for word in text.split(" "):
   if len(word)==2:
       print(word)
       x=int(input("Cy poprawić drugą literę? (TAK=1/NIE=0):"))
       if x==1:
           lista2=re.sub('([aA-zZ][A-Z]+ )',,text)

   else:
       lista1 = re.sub('([A-Z][A-Z][a-z]+)', lambda q: q.group(1).lower(), text)   ```
1

A USA? ;) Rozumiem, że chcesz poprawić tylko problemy z wielkością liter? To nawet nie ma co się bawić z regexami. Najpierw zignoruj wszystkie stringi, które są lower (abc, tomek..), potem zapytaj w przypadku tych, które są całe upper (IT, USA..). Na końcu popraw resztę:

def fix_case(word):
    return word[0].upper()+word[1:].lower()

lista2 = []
for word in text.split(" "):
    if word.islower():
         lista2.append(word)
        continue
    if word.isupper():
        ans = input('Czy poprawic wielkość liter w: {}? y/n'.format(word))
        if ans!='y':
            continue
    lista2.append(fix_case(word)
    

Ale jeżeli faktycznie musisz użyć re.sub (btw robisz re.sub po całym text za kazdym razem..) to odpowiadając dokładnie na Twoje pytanie:

le mam trudności, jak określić w re.sub (muszę tego użyć ) aby zamieniał drugą literę

W tym kawałku kodu wystarczy zindeksować string:

lista1 = re.sub('([A-Z][A-Z][a-z]+)', lambda q: q.group(1)[1:].lower(), text) 

Oczywiście przy dłuższej lamdzie i chęci wykrycia wyjątków (np. string krótszy niż 1) to lepiej zdefiniowac funkcję np. fix_case i wywołać ją:

lista1 = re.sub('([A-Z][A-Z][a-z]+)', fix_case, text) 

1 użytkowników online, w tym zalogowanych: 0, gości: 1