我有一个字符串' out '我需要将另一个字符串' 更改为',在一个名为' text '
的文本中。out = 'hello $ world'
into = '###'
text = 'this hello \n$ world text'
我也想知道是否有任何改变。
在我看来,我应该首先逃避' out' 文字(以允许修改像#' $'这样的字符)。然后,我应该更换所有你的' \ s +'使用' \ s +',此结果字符串应包含要用' ###'替换的正则表达式。
总结一下:我有这样的文字:
text = 'this hello \n$ world text'
我希望这样做:
result: 'this ### text'
我试过了:
re.sub(re.sub(ur'\s+', '\s+', re.escape(out)), into, text)
并得到结果:
'this hello \n$ world text'
还有这个:
re.sub(re.sub(ur'\s+', ur'\s+', re.escape(out)), into, text)
具有相同的结果。
我认为' \' char,但它有点令人困惑,我该如何解决?我正在运行python 2.7
答案 0 :(得分:1)
这里的主要问题是,re.escape(..)
也会逃避空白。事实上:
>>> re.escape('hello $ world')
'hello\\ \\$\\ world'
然而,通过r'\ '
代替r'\s+'
:
re.sub(r'\\\s+',r'\s+',re.escape(out))
或填充码:
>>> re.sub(re.sub(ur'\\\s+', ur'\s+', re.escape(out)), into, text)
'this ### text'
通过替换r\(\\\s+)+'
,您可以进一步提高效率,因为原始字符串中的两个空格现在映射到相同的'r'\ s +'':
>>> re.sub(re.sub(ur'(\\\s+)+', ur'\s+', re.escape(out)), into, text)
'this ### text'
您可以通过简单地将旧text
与新的new_text = re.sub(re.sub(ur'(\\\s+)+', ur'\s+', re.escape(out)), into, text)
change = text != new_text # change is a bool that is True if there is change
进行比较来检测是否存在变化。例如:
_p