【发布时间】:2013-02-26 18:07:24
【问题描述】:
我需要替换出现在较长字符串中的数字(角),看起来都与此类似:
[ 17 plane_17 \ 23 25 17 99 150 248 \ noname ]
我的函数将“旧”数字替换为“新”数字,例如如果旧数字是 17 而新数字是 19,那么结果应该是:
[ 17 plane_17 \ 23 25 19 99 150 248 \ noname ]
请注意,只有 \ 中的数字应该被替换(这些也可以是 // )。
为此,我尝试设置一个正则表达式替换,目的是避免 \ \ 或 / / 之外的数字:
newplane = re.compile(r"[^[_] (" + str(oldcorner) + ")").sub(str(newcorner), oldplane)
我很快意识到这不起作用,因为正则表达式从行首开始搜索,如果与模式不匹配则失败。
一定有一些我不知道的聪明方法。有什么建议吗?
【问题讨论】:
-
它们会在 '\\' 之间还是单个 '\' 之间?我的第一直觉是将其拆分为'\'(或双倍),在结果的每个第二个元素上调用普通的旧替换(旧,新),然后在'\'处将它们重新连接在一起。不过不是很pythonic,有兴趣看看有人有没有巧妙的方法
-
它们都在单个“\”或单个“/”内。这不是一个坏主意!也会删除正则表达式....
-
是的,这会让事情变得简单,但不确定如何在同一行中同时处理 '\' 和 '/'
标签: python regex parsing python-2.7