I need to replace some characters as follows: &
➔ \&
, #
➔ \#
, …
我编码如下,但我想应该有更好的方法。有什么提示吗?
strs = strs.replace('&', '\&')
strs = strs.replace('#', '\#')
...
原文由 prosseek 发布,翻译遵循 CC BY-SA 4.0 许可协议
>>> string="abc&def#ghi"
>>> for ch in ['&','#']:
... if ch in string:
... string=string.replace(ch,"\\"+ch)
...
>>> print string
abc\&def\#ghi
原文由 ghostdog74 发布,翻译遵循 CC BY-SA 2.5 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答862 阅读✓ 已解决
替换两个字符
我对当前答案中的所有方法以及一个额外的方法进行了计时。
使用
abc&def#ghi
的输入字符串并替换 & -> \& 和 # -> \#,最快的方法是像这样将替换链接在一起:text.replace('&', '\&').replace('#', '\#')
。每个函数的时间:
以下是功能:
时间是这样的:
替换 17 个字符
下面是执行相同操作但需要转义更多字符的类似代码 (\`*_{}>#+-.!$):
以下是相同输入字符串
abc&def#ghi
的结果:并使用更长的输入字符串(
## *Something* and [another] thing in a longer sentence with {more} things to replace$
):添加几个变体:
输入较短:
使用更长的输入:
所以我将使用
ba
以提高可读性和速度。附录
由评论中的 hacks 提示,
ab
和ba
之间的一个区别是if c in text:
检查。让我们针对另外两个变体测试它们:在 Python 2.7.14 和 3.6.3 上每个循环的时间以 μs 为单位,并且在与早期设置不同的机器上,因此不能直接比较。
我们可以得出结论:
有检查的人比没有检查的人快 4 倍
ab_with_check
在 Python 3 上略微领先,但ba
(带检查)在 Python 2 上领先更多然而,这里最大的教训是 Python 3 比 Python 2 快 3 倍! Python 3 上最慢的和 Python 2 上最快的之间没有太大区别!