我是 Python 新手,正在寻找一种方法来用字符串的 [AZ] 部分替换所有出现的“[AZ]0”,以摆脱某些用零填充的数字。我使用这个片段来摆脱我正在处理的字段中的整个事件:
import re
def strip_zeros(s):
return re.sub("[A-Z]0", "", s)
test = strip_zeros(!S_fromManhole!)
如何执行相同类型的过程但不删除“[AZ]0”表达式的前导字母?
提前致谢!
使用反向引用。
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
你可以尝试类似的东西
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'
我喜欢 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'