Python如何替换正则表达式的捕获组中的内容?

时间:2016-06-15 05:54:46

标签: python regex

-abc

我希望在.jpg之前移除-abc1234567.jpg,然后获取re.sub(r'\d(-abc).jpg$', '', string)。我尝试了-abc123456,但它也会替换捕获组之外的内容,并给我TIMESTAMP。是否有可能只替换捕获组中的内容,即'-abc'?

2 个答案:

答案 0 :(得分:2)

一种解决方案是使用正向前瞻如下。

import cv2.cv as cv
import numpy as np
import math

im=cv.LoadImage('h1.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)

pi = math.pi #Pi value

dst = cv.CreateImage(cv.GetSize(im), 8, 1)

cv.Canny(im, dst, 200, 200)
cv.Threshold(dst, dst, 100, 255, cv.CV_THRESH_BINARY)

#---- Probabilistic ----
color_dst_proba = cv.CreateImage(cv.GetSize(im), 8, 3)
cv.CvtColor(im, color_dst_proba, cv.CV_GRAY2BGR) # idem


rho=1
theta=pi/180
thresh = 100
minLength= 120 # Values can be changed approximately to fit your image edges
maxGap= 50

lines = cv.HoughLines2(dst, cv.CreateMemStorage(0), cv.CV_HOUGH_PROBABILISTIC, rho, theta, thresh, minLength, maxGap)
for line in lines:
    cv.Line(color_dst_proba, line[0], line[1], cv.CV_RGB(255, 0, 0), 3, 8)

cv.ShowImage("Hough Probabilistic", color_dst_proba)
cv.WaitKey(0)
cv.SaveImage("output.jpg",color_dst_proba)

OR

您可以按如下方式使用两个捕获组。

import re
p = re.compile(ur'(\-abc)(?=\.jpg)')
test_str = u"-abc1234567-abc.jpg"
subst = u""

result = re.sub(p, subst, test_str)  

答案 1 :(得分:0)

如果您只想删除jpg文件中的-abc,可以使用:

re.sub(r"-abc\.jpg$", ".jpg", string)

尽可能使用您的代码:您应该在要保留的部分周围放置'()',而不是要删除的部分。然后使用\g<NUMBER>选择字符串的那一部分。所以:

re.sub(r'(.*)-abc(\.jpg)$', '\g<1>\g<2>', string)