2013-03-13 78 views
0

我是Python的新手,正在寻找一种方法,用字符串的[AZ]部分替换所有出现的“[AZ] 0”以摆脱某些数字用零填充。我用这个片段摆脱从外地整体发生的,我的处理:Python正则表达式搜索和替换原始表达式的一部分

import re 
def strip_zeros(s): 
    return re.sub("[A-Z]0", "", s) 

test = strip_zeros(!S_fromManhole!) 

如何执行相同类型的程序,但不删除的首字母“[AZ] 0”表达?

在此先感谢!

+1

你的意思是在你的例子中有零个吗? – squiguy 2013-03-13 05:06:11

回答

0

你可以尝试像

In [47]: s = "ab0" 

In [48]: s.translate(None, '0') 
Out[48]: 'ab' 

In [49]: s = "ab0zy" 

In [50]: s.translate(None, '0') 
Out[50]: 'abzy' 
2

使用反向引用。

http://www.regular-expressions.info/refadv.html“\ 1到\ 9替换为第1到第9对捕获括号之间的文本匹配。”

http://docs.python.org/2/library/re.html#re.sub“反向引用,例如\ 6,被模式中由组6匹配的子字符串替换。”

未经检验的,但它应该是这样的:

return re.sub(r"([A-Z])0", r"\1", s)

配售的第一个字母一个捕获组内,并与\1

+0

如果我正确地阅读这个问题,正则表达式应该是'r'([A-Z])0“'。 – 2013-03-16 18:51:48

+0

@Janne Karila谢谢,编辑 – Patashu 2013-03-17 22:17:02

0

引用它,我喜欢Patashu的答案对于这种情况,但为求完整性,将函数传递给re.sub而不是替换字符串在更复杂的情况下可能更清晰。该函数应该采用单个匹配对象并返回一个字符串。

>>> def strip_zeros(s): 
...  def unpadded(m): 
...    return m.group(1) 
...  return re.sub("([A-Z])0", unpadded, s) 
... 
>>> strip_zeros("Q0") 
'Q'