0

我是 Python 新手,正在寻找一种方法来用字符串的 [AZ] 部分替换所有出现的“[AZ]0”,以摆脱某些用零填充的数字。我使用这个片段来摆脱我正在处理的字段中的整个事件:

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

test = strip_zeros(!S_fromManhole!)

如何执行相同类型的过程但不删除“[AZ]0”表达式的前导字母?

提前致谢!

4

3 回答 3

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

于 2013-03-13T05:06:42.433 回答
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'
于 2013-03-13T05:04:29.710 回答
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'
于 2013-03-20T15:23:09.307 回答