繁体   English   中英

Python RegEx搜索并替换原始表达式的一部分

[英]Python RegEx search and replace with part of original expression

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

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"([AZ])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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM