需求:
将位于<b></b>之间的before替换为after
eg.
before <b>first before</b> before <b>before before</b>
变成
before <b>first after</b> before <b>after after</b>
Python:
import re
subject = "before <b>first before</b> before <b>before before</b>"
innerre = re.compile("before")
def replacewithin(matchobj):
return innerre.sub("after", matchobj.group())
result = re.sub("<b>.*</b>", replacewithin, subject)
print result
Tcl:
set subject "before <b>first before</b> before <b>before before</b>"
set pos 0
while {[regexp -nocase -indices -start $pos {<b>(.*?)</b>} $subject offsets]==1} {
set bOffSets $offsets
set pos [expr {1+[lindex $offsets 1]}]
set sTmp [string range $subject [lindex $offsets 0] [lindex $offsets 1]]
set ios 0
while {[regexp -indices -start $ios -linestop {(before)} $sTmp offsets]==1} {
set ios [expr {1+[lindex $offsets 1]}]
set start [lindex $offsets 0]
set end [lindex $offsets 1]
set element [string range $sTmp [lindex $offsets 0] [lindex $offsets 1]]
set sTmp [string replace $sTmp $start $end "after"]
}
set subject [string replace $subject [lindex $bOffSets 0] [lindex $bOffSets 1] $sTmp]
}
puts "subject:$subject"