簡體   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