亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 6588 | 回復(fù): 4
打印 上一主題 下一主題

正則替換問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-10-05 20:40 |只看該作者 |倒序?yàn)g覽
  1. >>> line='source_host=1.1.1.1'
  2. >>>a=re.compile(r'(source_host=).*?')
  3. >>> a.sub(r'\1',line)
  4. 'source_host=1.1.1.1'
復(fù)制代碼
為什么結(jié)果不是'source_host='呢?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-10-05 23:52 |只看該作者
搞錯(cuò)了吧。。
re.findall('.+(?:=)',line)  這樣就可以

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-10-06 08:40 |只看該作者
本帖最后由 zhasm 于 2010-10-06 08:49 編輯
  1. a=re.compile(r'(source_host=).*?')
復(fù)制代碼
該正則僅能夠匹配文本source_host=,原因是后面的部分.*?不匹配任何文本也可以(懶惰模式),因此它就偷懶不再匹配。

整個(gè)替換語(yǔ)句是將source_host=1.1.1.1中的source_host=替換為source_host=而已。因此出現(xiàn)上面的結(jié)果。

如果想按照你的本意來(lái)替換,可以將正則式改為:
  1. a=re.compile(r'(source_host=).*')
復(fù)制代碼
即,去掉末尾的問(wèn)號(hào),改為貪婪模式,正則式就能匹配整行文本,并替換為\1了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-10-06 14:36 |只看該作者
回復(fù) 3# zhasm


    謝謝,但是如果用包含數(shù)字的字符串去替換還是會(huì)出錯(cuò):
  1. >>> line='source_host=1.1.1.1'
  2. >>> a=re.compile(r'(source_host=).*')
  3. >>> b='abcd'
  4. >>> a.sub(r'\1%s' %b ,line)
  5. 'source_host=abcd'
  6. >>> b='1.2.3.4'
  7. >>> a.sub(r'\1%s' %b ,line)
  8. Traceback (most recent call last):
  9.   File "<stdin>", line 1, in <module>
  10.   File "/usr/local/python/lib/python2.6/re.py", line 278, in filter
  11.     return sre_parse.expand_template(template, match)
  12.   File "/usr/local/python/lib/python2.6/sre_parse.py", line 795, in expand_template
  13.     raise error, "invalid group reference"
  14. sre_constants.error: invalid group reference
  15. >>>
  16. >>> b='202.101.10.1'
  17. >>> a.sub(r'\1%s' %b ,line)
  18. 'P2.101.10.1'
  19. >>>  
復(fù)制代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-10-06 16:36 |只看該作者
本帖最后由 zhasm 于 2010-10-06 16:37 編輯
  1. >>> b='1.2.3.4'
  2. >>> a.sub(r'\1%s' %b ,line)
復(fù)制代碼
這句有問(wèn)題。將b代入之后,替換部分就成了r'\11.2.3.4'了。原正則中沒(méi)有第11組。因此失敗。

復(fù)雜的正則替換,在python中可以暫時(shí)使用callback函數(shù)來(lái)搞定;蛘邔(xiě)個(gè)inline版,例如
  1. >>> a.sub(lambda x:x.group(1)+b ,line)
  2. 'source_host=1.2.3.4'
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP