for element in f:
galcode_scan = re.search(ur'blah\.blah\.blah\(\'\w{5,10}', element)
如果我尝试执行re.sub并用其他东西删除blahs并保留最后一位,则\ w {5,10}变为文字。如何保留正则表达式中占用的字符?
编辑:
这是完整的代码
for element in f:
galcode_scan = re.search(ur'Imgur\.Util\.triggerView\(\'\w{5,10}', element)
galcode_scan = re.sub(r'Imgur\.Util\.triggerView\(\'\w{5,10}', 'blah\.\w{5,10}', ur"galcode_scan\.\w{5,10}")
print galcode_scan
答案 0 :(得分:1)
您可以使用正向前瞻((?=...)
)在替换时不匹配,但匹配整个模式:
re.sub("blah\.blah\.blah\(\'(?=\w{5,10})", "", "blah.blah.blah('qwertyu")
' qwertyu'
如果要替换匹配,只需将其添加到替换参数:
re.sub("blah\.blah\.blah\(\'(?=\w{5,10})", "pref:", "blah.blah.blah('qwertyu")
' PREF:qwertyu'
您也可以通过捕获模式((..)
)并反向引用它(\1
.. \9
)来实现:
re.sub("blah\.blah\.blah\(\'(\w{5,10})", "pref:\\1", "blah.blah.blah('qwertyu")
' PREF:qwertyu'
<强>更新强>
提供的例子的更精确的模式:
re.sub("Imgur\.Util\.triggerView'(?=\w{5,10})", "imgurl.com/", "Imgur.Util.triggerView'B1ahblA4")
&#39; imgurl.com/B1ahblA4'
这里的模式是一个简单的字符串,所以无论你需要什么动态,你都可以使用变量。例如,使用不同的映射:
map = {
'Imgur\.Util\.triggerView\'': 'imgurl.com/',
'Example\.Util\.triggerView\'': 'example.com/'
}
items = [
"Imgur.Util.triggerView'B1ahblA4",
"Example.Util.triggerView'FooBar"
]
for item in items:
for old, new in map.iteritems():
pattern = old + '(?=\w{5,10})'
if re.match(pattern, item):
print re.sub(pattern, new, item)
imgurl.com/B1ahblA4
example.com/FooBar
答案 1 :(得分:0)
你也可以这样工作:
import re
element = "Imgur.Util.triggerView('glglgl')"
galcode_scan = re.search(ur'Imgur\.Util\.triggerView\(\'(\w{5,10})\'\)', element)
现在你有了一个可以进一步使用的匹配对象:使用
galcode_scan.expand('replacement.\\1')
galcode_scan.expand('replacement.\g<1>')
结果会得到replacement.glglgl
。
这可以通过将替换字符串应用于捕获的组来实现。