pythonre的用法
A. python re :的意思
不捕獲分組的意思,整個正則表達式的意思是abc的至少一次的組合(+是貪婪匹配,盡量多組,題目中結果共9個字母)。如果不加?:則所有abc(3個字母)都被放在結果里。
B. python如何安裝re庫
re庫是Python關於正則表達式的一個內置模塊,使用時無需下載,直接import即可。我們首先來看看re.py自己頭部的注釋是如何描述自己的:
這個模塊提供與Perl語言中類似的正則表達式匹配操作,支持bytes和unicode兩種格式的字元串,處理的字元串可以包含空字元以及超出ASCII碼范圍的字元(比如中文字元)。
正則表達式中既有'A'、'a'這種就代表自身的一般字元,又有一些具有特定含義的特殊字元,如|、(等。特殊字元既可以作為一個單純的值表示它自身,也可以影響它周邊1的正則表達式的解釋。
re庫中還包含一些特殊的字元序列,由\和一個字元組成的特殊序列在下表列出,如果\之後的字元不在下列表格中,正則表達式將會匹配字元本身,如\c匹配的就是字元c本身。我們發現如果 \小寫字母 代表了某一含義,那麼對應的 \大寫字母 常常代表它的補集。
C. python的re模塊匹配【】符號
match是全串匹配,搜索字元串中的匹配子項你需要用re.search()
D. python中re模塊的compile函數應該怎麼用
Python通過re模塊提供對正則表達式的支持。使用re的一般步驟是先使用re.compile()函數,將正則表達式的字元串形式編譯為Pattern實例,然後使用Pattern實例處理文本並獲得匹配結果(一個Match實例),最後使用Match實例獲得信息,進行其他的操作。
舉一個簡單的例子,在尋找一個字元串中所有的英文字元:
importre
pattern=re.compile('[a-zA-Z]')
result=pattern.findall('as3SiOPdj#@23awe')
printresult
#['a','s','S','i','O','P','d','j','a','w','e']
E. python re模塊中 (P) (P=name) 及 \g<name> 三者的使用區別
題主你好,
沒有單獨的(?P)這種用法, 猜測應該指的是(?P<name>), (?P=name),g<name>這三者的用法.
首先說(?P<name>),它其實和單個圓括弧,(),本質上一樣, 只不過在後面引用分組中多了一種引用方法:
(123)對於這個分組, 你引用時只能是1(這種也是我們最常用的分組與引用的方法),見例子:
=====
希望可以幫到題主, 歡迎追問.
F. Python正則表達式之re.match()
我們在面對生物數據,比如序列信息(比如鹼基序列、氨基酸序列等)的時候, 會時常要問,這其中是否包含著且含有多少某種已知的模式,一段DNA中是否包含轉錄起始特徵TATA box、一段RNA中是否包含某種lncRNA、一段肽鏈中是否包含鋅指結構等等;另一方面,我們在操作數據時,會時常遇到諸如把某個字元(對象)換成另一種字元(對象)的替換操作,而其本質還是如何搜索符合某種(替換)模式的對象。
在這些幾乎天天都可以碰到的 模式匹配/搜索問題中,正則表達式就是一把解決問題的利劍!
在Python的re模塊中,常用的有四個方法(match、search、findall、finditer)都可以用於匹配字元串,今天我們先來了解一下re.match()。
re.match()必須從字元串開頭匹配! match方法嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。主要參數如下:
舉個栗子來理解一下它的用法:
運行結果:
從例子中我們可以看出,re.match()方法返回一個匹配的對象,而不是匹配的內容。通過調用span()可以獲得匹配結果的位置。而如果從起始位置開始沒有匹配成功,即便其他部分包含需要匹配的內容,re.match()也會返回None。
一般一個小括弧括起來就是一個捕獲組。我們可以使用group()來提取每組匹配到的字元串。
group()會返回一個包含所有小組字元串的元組,從 0 到 所含的小組號。
直接調用groups()則直接返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
再舉一個栗子:
運行結果:
G. python中re庫的常見用法
. 匹配除換行符外的任意字元
\d 匹配數字
\D 匹配非數字
\w 匹配數字字母下劃線,支持中文
\W 小寫w的反集
[abc] 匹配abc中任意一個
[a-f] 匹配字母a到f中的任意一個
x|y 匹配x或者y
^ 匹配字元串的開頭
$ 匹配字元串的結尾
{3,5} 匹配次數,最少3個,最多5個
{3,} 至少匹配3次
* 匹配前一個字元,0次或多次
+ 匹配前一個字元,1次或多次
? 當前面不是數量表達式時,代表匹配0次或1次
舉個栗子:
findall()函數的作用是匹配所有符合條件字元串,並以列表形式返回
由於.是匹配除換行符外的所有字元,{3,5} 匹配次數,最少3個,最多5個,在默認的貪婪模式下會匹配最多的字元,所以在列表中,字母a開頭的字元串後面都跟了5個字元。
可以看到在非貪婪模式下,列表中的每一項都匹配最少的字元數。
從前往後,匹配到符合條件的最短的每一個字元串
邊界字元:
^ 限定開頭
$ 限定結尾
匹配分組:
() 提取出來的只有括弧里匹配到的部分
上文中已經用到這個方法了,返回匹配到的字元串列表,如果沒有匹配到的內容,則返回空列表。
flags參數是可以省略的,不省略時代表具有其他特殊的功能,如忽略大小寫,忽略換行符等,re.S代表匹配時忽略換行符
re.search()和re.findall()的參數是一樣的,只是返回結果不同,如果匹配到了,就返回該結果的正則表達式對象;如果沒有匹配到,則返回None
使用re.search()返回匹配到的第一個字元串的正則表達式對象,找到了就會停止匹配。因此這個函數比較適合在一個大文本中找第一個出現的字元串。
若想讓這個字元串展示出來,還需要藉助group()函數。
舉個栗子:
這個函數的作用是將正則表達式編譯為一個正則表達式對象,如果要多次使用這個正則表達式的話,可以先編譯,然後復用,使程序更高效一些,對這個對象繼續使用.match(string)就可以顯示匹配到的正則表達式對象,後續如果想要獲取具體內容的話,和上面是一眼國的,直接使用group(0)就可以啦。
如果不考慮復用的話,和re.mach(pattern, string)的效果是一樣的。
從運行結果也可以看出,re.match()和re.search()的區別,雖然二者都會返回匹配到的正則表達式對象,但是re.match()是從字元串的最開始位置開始匹配的,如果最開始的字元不匹配則會直接返回None;而re.search()則會一直往後找,直到找到第一個符合條件的字元串。
re.sub()函數用於替換字元串中的匹配項
舉個栗子:
將所有數字替換為了一個空格。
H. Python re匹配
按照你的要求編寫匹配英文字典的Python3程序如下
importre
s='400buy買DIRECTION&PREPOSITION方向介詞490something某物 446beside在……旁邊401arrive到達 491every每個 402come來447above在……上面 ANIMALS動物 403hurt傷;刺痛448below在……下面 492chicken雞'
regex=r'([0-9]+s+[A-Za-z_-]+s+(在……[u4e00-u9fa5]+|S+))'
result=re.findall(regex,s)
foriinresult:
print(i[0])
源代碼(注意源代碼的縮進)
I. python 中 re.sub 和 re.compile 是啥意思呀跪求大神解釋。
在python中re是一個常用的模塊,主要是通過正則表達式進行字元串處理。它的速度相對自己用 find, replace, split來說,通常更快。當然功能更強大。
正則表達式也是一種語言,所以如果通過re.compile把它編譯成對象,會速度快很多。所以我們經常看到這樣的語句
exp=re.compile("S+")
m=exp.search(bigtext)
printm.group(0)
這段話等同於
m=re.search("S+",bigtext)
printm.group(0)
re.sub則相當於字元串操作中的replace,比如
sometext=re.sub("(?isu) "," ",sometext)
上面這句話是將回車換行,變成換行。這是為了將windows下的文本文件移到linux下,防止某些軟體不兼容所做的處理。
簡單的說re.sub是做字元串替換的, re.compile是將正則表達式編譯成一個對象,加快速度,並重復使用。
J. python re 正則匹配某類字元前的所有字元(不包括該類字元)
首先,「匹配除2012這個字元串以外的任意字元?」語義不明,你是想將其從原字元串中刪除還是要匹配2012以外的年份?
姑且認為你的意思是後者,也即在一個特定模式里排除某些匹配的實例。
方法一、先預處理,將要匹配的字元串里的2012替換成不可能出現的字元串,然後再進行匹配處理,最後再將其替換回2012。
方法二、使用不匹配的前向斷言 (?! ...):
import re
s = '....<b>0033<b> <b>1033<b> <b>2012<b> <b>2033<b> <b>2043<b> <b>3033<b>.....'
p = re.compile('<b>(?!2012)[0-9]{4}<b>')
for m in re.finditer(p, s):
print m.group()
可以匹配出
<b>0033<b>
<b>1033<b>
<b>2033<b>
<b>2043<b>
<b>3033<b>
而沒有'<b>2012<b>'