注意,如果你改變的rndStr
或01的值到文本(比如'abc')而不是數字,你會得到更接近預期結果的東西嗎?
在你表達re.sub
你有r'\1'+rndStr+...
這組合成'\1'+'20101215'
,然後嘗試引用的\120101215
後面參考這可能不是你打算什麼...
可以使用指定的反向引用,使回參考明確:
rep1 = "20101215"
rep2 = "20101216"
st = "Looking at dates between 20110316 and 20110317"
print re.sub(r'(?P<fp>.+)[0-9]{8}(?P<lp>.+)[0-9]{8}',
r'\g<fp>'+rep1+r'\g<lp>'+rep2,st)
更妙的是,使用一個更容易理解的語法和檢查嘗試匹配的回報:
m=re.search(r'(?P<fp>.+)[0-9]{8}(?P<lp>.+)[0-9]{8}',st)
if m:
print m.group('fp')+rep1+m.group('lp')+rep2 #you could use m.group(1) too
else:
print "no match..."
無論哪種情況,都會生成您想要的字符串Looking at dates between 20101215 and 20101216
。
命名後向引用python的docs:
(?P<name>...)
定期括號相似,但 由組相匹配的字符串是通過符號 的 正則表達式的其餘部分中訪問組名「name」。組名必須爲 有效的Python標識符,並且每個 組名必須在正則表達式中僅定義一次 。 A 符號組也是一個編號爲 的組,就好像該組不是 命名。因此,在下面的例子 名爲'id'
的組也可被引用作爲 編號組1
例如,如果圖案是 (?P<id>[a-zA-Z_]\w*)
,該基團可以是 通過其名稱在參數參照的 方法匹配的對象,如 m.group('id')
或m.end('id')
,並且還通過 名稱在給予.sub()
正則表達式 本身(使用(?P=id)
)和替換 文本(使用\g<id>
)。
我不認爲OP要求這樣做。 – 2011-03-16 22:13:15
原始字符串有兩個(不同)日期,所以這不會工作。不管怎麼說,還是要謝謝你。 – 2011-03-17 14:42:58