使用代码

时间:2017-03-30 21:48:29

标签: python regex python-2.7 escaping

我有一个字符串' 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

1 个答案:

答案 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