Article View: pl.comp.lang.python
Article #28181Re: Konwersja "\t" do char
From: Jordan Szubert
Date: Sat, 23 Jul 2011 19:31
Date: Sat, 23 Jul 2011 19:31
61 lines
2896 bytes
2896 bytes
Dnia 23-07-2011 o 20:57:51 Michal Wawrzyniuk <mwawrzyn07@gazeta.pl>
napisał(a):
>>>
>>
>> określ dokładniej co chcesz, podaj więcej przykładów, nie tylko
>> legalnych (np. co jak użytkownik poda "dupa")
>>
>
> Jak zrobic to inaczej to wiem nie ma problemow. Tylko chodzi mi o
> konwersje znaku 'escape' \t zakodowanego w stringu czyli dwa znaki do
> jedengo zanku char '\t' metoda z substring dziala tylko chodzi mi o
> ogolne rozwiaznie dla jakiegokolwiek znaku escape np. \t, \n, \r
>
>
> czyli: uzytkownik podaje jeden ze znakow \t, \n, \r
>
> Teraz jak zmodyfikowac string2 zeby string1=string2 metoda z replace
> dziala ale w tym przypadku musielibysmy znac ktory to jest znak
> specjalny czy sie nie zrobic jakies ogolnej konwersji z '\\?' ---> '\?'
istnieje funkcja eval, ale to bardzo rzadko jest właściwe rozwiązanie, a i
tak należałoby ją jakoś opakować...
albo coś w tę stronę:
def UserInputToChar(s:str)->str:
"""konwertuje ,,opis'' znaku do znaku
interpretuje znaki specjalne jak Python3, z wyjątkiem \N
pisane w kliencie news, nie testowane
"""
if not (isinstance(s,str) and s):
raise Exception("input must be non-empty string")
if s[0]!='\\':
if len(s)==1:
return s
else:
raise Exception("multiple characters not allowed")
else:
spc="\n\t\r\v\f\b\a\\\'\""
spc={repr(c)[2]:c for c in spc}
dts='0123456789abcdefABCDEF'
if len(s)==2 and s[1] in spc:
return spc[s[1]]
elif len(s)==4 and s[1]=='x' and set(dts).issuperset(s[2:]):
# \xhh
return chr(int(s[2:],16)
elif len(s) in {2,3,4} and set(dts[:8]).issuperset(s[1:])
# \ooo \oo \o
return chr(int(s[1:],8)
elif len(s)==6 and s[1]=='u' and set(dts).issuperset(s[2:]):
# \uXXXX
return chr(int(s[2:],16)
elif len(s)==10 and s[1]=='U' and set(dts).issuperset(s[2:]):
# \UXXXXXXXX
return chr(int(s[2:],16)
raise Exception("unparseable input",s)
--
Jordan Szubert
Technical Details
Message-ID:
<op.vy266glnhilul8@asus7.home>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<j0covf$ae$1@inews.gazeta.pl> <20110723113522.0ef604c1.gryf_esm-no@spam-o2.pl> <j0ebli$4bd$1@inews.gazeta.pl> <op.vy2yoyofhilul8@asus7.home> <j0f5jh$ija$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Newsgroups: pl.comp.lang.python Subject: Re: Konwersja "\t" do char References: <j0covf$ae$1@inews.gazeta.pl> <20110723113522.0ef604c1.gryf_esm-no@spam-o2.pl> <j0ebli$4bd$1@inews.gazeta.pl> <op.vy2yoyofhilul8@asus7.home> <j0f5jh$ija$1@inews.gazeta.pl> Date: Sat, 23 Jul 2011 21:31:18 +0200 MIME-Version: 1.0 From: "Jordan Szubert" <usenet@joru.us.to> Organization: HELL inc. Message-ID: <op.vy266glnhilul8@asus7.home> User-Agent: Opera Mail/11.50 (Win32) Lines: 75 NNTP-Posting-Host: 83.26.229.253 X-Trace: 1311449483 unt-rea-a-02.news.neostrada.pl 2505 83.26.229.253:36240 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit