[英]python re.sub with variable
輸入文本:
Ell és la víctima que expia els nostres pecats, i no tan sols els nostres, sinó els del món sencer.
預期產量:
Ell és la víctima que expia els nostres pecats, i no tan sols els nostres, sinó els del món sencer.
已知事實:unichr(233)=é
現在我有
re.sub('&#([^;]*);', r'unichr(int(\1))', inputtext, flags=re.UNICODE)
當然不起作用,不知道如何在\\1
上傳遞函數
任何想法?
使用lambda函數 :
re.sub('&#([^;]*);', lambda match: unichr(int(match.group(1))), t, flags=re.UNICODE)
對您來說幸運的是, re.sub
接受一個函數作為參數。 該函數將收到一個“ MatchObject” -從那里,您可以通過match.group(1), match.group(2)
等獲取匹配的組。該函數的返回值將是要替換的字符串輸入文本中的匹配組。
def fn(match):
return unichr(int(match.group(1)))
re.sub('&#([^;]*);', fn, inputtext, flags=re.UNICODE)
如果確實需要,可以內聯它並使用lambda -但是我認為lambda使得在這種情況下1更加難以閱讀。
順便說一下,根據您的python版本,有更好的方法來取消轉義html(因為它還將處理特殊的轉義序列,例如'&'
:
>>> import HTMLParser
>>> s = 'Ell és la víctima que expia els nostres pecats, i no tan sols els nostres, sinó els del món sencer.'
>>> print HTMLParser.HTMLParser().unescape(s)
Ell és la víctima que expia els nostres pecats, i no tan sols els nostres, sinó els del món sencer.
>>> import html
>>> html.unescape(s)
1,尤其是如果您給fn
一個更明智的名稱;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.