2012-08-10 5 views
-1
l = ':;\'"[email protected]#$%^&*()_-=+][{}~`.><?/\\|' # list of character that can be used for emoticons 

s = '<p>This :) is an example for:) emoticons :)</p>' 

에 대한 문자를 교체, 같은 결과를 만드는 방법 파이썬 - 내가 <code>s.replace(':)', '<img>')</code> 및 사용 이모티콘

result = '<p>this <img> is an example for<img> emoticons <img></p>' 

: 어떤 도움

result = '<p>this <img> is an example for:) emoticons <img></p>' 

감사합니다!

편집 : 초기 목록이 l입니다. 사용자는 l의 문자로만 이모티콘을 만들 수 있습니다. 예 : :), :], 요양원 각 이모티콘을 사용하여 응답으로 이미지로 변경합니다. 따라서 사용자는 데이터를 올바르게 입력해야합니다. 와일드 카드는 단독으로 사용해야합니다. 어려운 부분은 HTML 태그가 포함 된 입력 데이터입니다.

+3

더 구체적으로. ""하위 문자열이 공백으로 둘러싸인 경우에만 대체 하시겠습니까? "for :)"을 "for"로 바꾸시겠습니까? –

+0

너무 많은 파이썬 모르겠지만 다음과 같은 방법으로 할 수 있다고 생각합니다 : 1) 먼저 두 번째 ''을 검색하고이 인덱스를 반환합니다. 2) 두 부분으로 나눌 수 있습니다. [1-index] s [(index + 4) -length (s)] 3) replace()를 사용할 수 있습니다. –

+0

오, 내 잘못이야. 수정되었습니다. :) – ben

답변

2
import re 
emos = { ':)' : 'smiley.jpg', 
     ':(' : 'saddy.jpg', 
     ';p' : 'bllinky.jpg' } 
pattern = re.compile('|'.join(re.escape(emo) for emo in emos)) 
def emoImg(emoMatch): 
    return '<img src = "/images/{0}>'.format(emos[emoMatch.group(0)]) 
def emoSub(string): 
    return pattern.sub(emoImg,string) 
print(emoSub('Hi :) I miss you :(')) 
1
>>> s = '<p>This :) is an example for:) emoticons :)</p>' 
>>> s.replace(' :)', ' <img>') 
'<p>This <img> is an example for:) emoticons <img></p>' 

패턴에 선행 공백이있는 부분 만 바꾸려면 일치 항목과 대체 부분 모두 앞에 선행 공백을 넣으십시오.

+0

브렌든과 저는 똑같은 대답을했습니다. ':)'은 내 '\ s : \\)'와 같습니다 (\ s는 하나의 공백이고 : \\)는) 이스케이프 된) . 이것에 대한 대가로 그에게 w/o 끌기 정규식; 그러나 유스 케이스가 이것보다 복잡하다면 실제로 정규 표현식을 사용해야 할 수도 있습니다. – verbsintransit

+0

매우 사실입니다. 방금 사소한 사건을 해결했습니다. 더 복잡한 것은 무엇이며, 정규 표현식은 그 위치에 있습니다. –

1
import re 
s = '<p>This :) is an example for:) emoticons :)</p>' 
s = re.sub('\s:\)', ' <img>',s) 
관련 문제