对一句正则表达式的理解
在《Python基礎(chǔ)教程》的第198頁上看到這樣一句:
re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!')
其中:emphasis_pattern = r'\*([^\*]+)\*'
結(jié)果為:'Hello, <em>world</em>!'
?
對emphasis_pattern = r'\*([^\*]+)\*'
頭尾的\*取消了元字符*,即只是作為普通字符
中間的()是一個子模式,字符串中與其匹配的子字符串可以用/1進(jìn)行模式逆引用
[ ]+表示[ ]中的字符至少匹配一個
^\*表示匹配除了*號外的任何符號
與其匹配的例子:*abc* ? (其中abc可以換成除*的任何字符)
?
對re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!')
調(diào)用函數(shù)sub(pat, repl. string)
首先要明白string是匹配pat的,函數(shù)的作用是將 匹配的部分用字符串repl替換掉:
如re.sub(r'a[abc]+d' , 'python' , 'hello,abcd')就是:'hello,python'
所以上面那個奇怪的東東其實就是用<em>\1</em>這個字符串來替換掉'Hello, *world*!'滿足emphasis_pattern的部分而已(其實就是*world*)
那么\1是什么東西?
查了些資料,發(fā)現(xiàn)這個是re里面的子模式的逆向應(yīng)用
\1代表的是'Hello, *world*!'匹配emphasis_pattern中( )里面的部分,也就是world
OK!現(xiàn)在就變成了:
re.sub(?r'\*([^\*]+)\*', '<em>world</em>', 'Hello, *world*!')
用<em>world</em>替換掉?*world*,搞定
關(guān)于子模式和逆向引用:http://www.cnblogs.com/ylan2009/articles/2382870.html
通過理解這個正則語句,學(xué)到了不少
轉(zhuǎn)載于:https://www.cnblogs.com/ylan2009/archive/2012/03/07/2382880.html
總結(jié)
以上是生活随笔為你收集整理的对一句正则表达式的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下搭建android开发环境
- 下一篇: 查看本机打开的端口