簡體   English   中英

帶有變量的python re.sub

[英]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(因為它還將處理特殊的轉義序列,例如'&'

Python2.x

>>> 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.

Python3.x

>>> import html
>>> html.unescape(s)

參考

1,尤其是如果您給fn一個更明智的名稱;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM