1. python正則表達式指定開始匹配的敵方
一. 簡介
正則表達式又叫規則表達式,是處理字元串的強大工具。在python中通過調用re模塊,可以實現正則匹配,正則表達式模式被編譯成一系列的位元組碼,然後由C編寫的匹配引擎執行
二. python常用字元含義(匹配模式)
1186367-20180604115644788-1913251705.png
三. re模塊
1. re.match(pattern, string, flags=0) | match(string, [pos, endpos]) (這個用於編譯後返回的正則表達式對象Pattern.match())
1)作用:嘗試從字元串的起始位置匹配一個模式,如果起始位置匹配成功,返回一個match對象,否則返回None
pattern:匹配的正則表達式
string:要匹配的字元串
flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等
2) 正則表達式可以包含一些可選標志修飾符來控制匹配模式。修飾符被指定為一個可選的標志,多個修飾符可以通過 | 來指定,如re.I | re.M表示對大小寫不敏感和多行匹配物卜空
1186367-20180604123302464-360465156.png
3) 實例
importreprint(re.match('www', 'www.runoob.com').span()) #在起始位置匹配
print(re.match('com', 'www.runoob.com')) #不在起始位置匹配
運行結果為:
(0, 3)
None
為什麼第一個起始位置匹配要加span()?
span()的作用是:返回一個元組包含匹配 (開始,結束) 的位置,如果不加span(),我們獲得的只是一個match obj,只有加了span(),我們才能獲得匹配罩瞎對象的位置。不信請看:
#在命令行輸出
print(re.match('www', 'www.runoob.com'))<_sre.SRE_Match object; span=(0, 3), match='www'>
print(re.match('com', 'www.runoob.com'))
None
為什麼第二個非起始位置匹配不加span()?
不在起始位置匹配,默認返回的None,而None對象是沒有span()方法的,這時候就會報錯:
importreprint(re.match('com', 'www.runoob.com').span())
Traceback (most recent call last):
File"", line 1, in
print(re.match('com', 'www.runoob.com').span())
AttributeError: 'NoneType' object has no attribute 'span'
2. re.search(pattern, string, flags=0) | search(string, [pos, endpos])(這個用於編譯後返回的正則表達式對象Pattern.search())
1) 作用:在字元串內查找匹配模式,只要找到第一個匹配則返回一個match對象,如果沒有找到,則返回None
importre#不加span()返回一個match對象
print(re.search('www', 'www.runoob.com'))<_sre.SRE_Match object; span=(0, 3), match='www'>
print(re.search('www', 'www.runoob.com').span())
(0,3)print(re.search('com', 'www.runoob.com').span())
(11, 14)
3. re.match和re.search一旦匹配成功,就會返回一個match object對象,而match object對象有以下方法:
group(num) num代表組號,表示匹配第num組的字元串,不寫時默認是0,表示匹配整個表達式的字元串。group()也可以一次輸入多弊悄個組號,如group(1, 2, 3),這種情況下它將返回一個包含那些組所對應的元組
groups() 返回一個包含所有小組字元串的元組,從1到所含的小組號
span() 返回一個元組包含匹配(開始、結束)的位置
start() 返回匹配開始的位置
end() 返回匹配結束的位置
1) 實例
importre
line= "Cats are smarter than dogs"searchObj= re.search( r'(.*) are (.*?) .*', line, re.M|re.I)print(searchObj.group())
Cats are smarter than dogsprint(searchObj.group(0))
Cats are smarter than dogsprint(searchObj.group(1))
Catsprint(searchObj.group(2))
smarterprint(searchObj.group(1, 2))
('Cats', 'smarter')
print(searchObj.groups())
('Cats', 'smarter')
為什麼第二組匹配是 (.*?) 而不是 (.*)
我們做個試驗,嘗試一下 (.*)
importre
line= "Cats are smarter than dogs"searchObj= re.search( r'(.*) are (.*) .*', line, re.M|re.I)print(searchObj.group())
Cats are smarter than dogsprint(searchObj.group(1))
Catsprint(searchObj.group(2))
smarter thanprint(searchObj.group(1, 2))
('Cats', 'smarter than')
注意到group(2)的數據是不同的,這個是為什麼呢?這就涉及到貪婪匹配和非貪婪匹配
貪婪匹配: 在整個表達式匹配成功的情況下,盡可能多的匹配。比如上面的 .*
.表示除換行之外的所有字元, *表示匹配前面的字元0次或無數次
非貪婪匹配:在整個表達式匹配成功的情況下,盡可能少的匹配。比圖上面的 .*?
?表示匹配前面字元0次或1次
注意前面 are () .* 中,()前後是兩個空格,而are之後兩個空格之間有兩種情況,1. "smarter than", 2. "smarter",具體選擇哪種是由匹配模式決定的,當()里是貪婪匹配時,.*可以匹配smarter,可以匹配空格,可以匹配than,當()里是非貪婪模式時, .*?只會匹配smarter,因為它最多匹配一次
為什麼要用前綴 r 呢?
我們知道在python中, \ 表示轉義字元,如果需要匹配一個 \ 本身呢?我們就要用\\, 而分別對每個 \ 進行轉義,就需要用 \\\\
注意:如果字元串中有字元*需要匹配,可以使用\*或字元集[*]
4. re.compile(pattern, [flags])
1) 作用:用於編譯正則表達式,生成一個正則表達式對象(Pattern,這個Pattern不能直接實例化,必須由re.compile()進行構造),供match()和search()這兩個函數使用
pattern:一個字元串形式的正則表達式
flags:編譯標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫、多行匹配等
2) 實例1
importre#用於匹配至少一個數字
pattern = re.compile(r'\d+')#從開始位置匹配
m = pattern.match('one12twothree34four')#沒有匹配,返回None
print(m)
None#從"1"的位置開始匹配
m = pattern.match('one12twothree34four', 3, 10)#正好匹配返回一個match對象
print(m)<_sre.SRE_Match object; span=(3, 5), match='12'>
print(m.group())12
print(m.start())3
print(m.end())5
print(m.span())
(3, 5)
實例2
importre#re.I表示忽略大小寫
pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)
m= pattern.match('Hello World Wide Web')#匹配成功返回一個match對象
print(m)<_sre.SRE_Match object; span=(0, 11), match='Hello World'>
#返回匹配成功的整個子串
print(m.group(0))
Hello World#返回匹配成功的整個子串的索引
print(m.span(0))
(0,11)#返回第一個分組匹配成功的子串
print(m.group(1))
Hello#返回第一個分組匹配成功的子串的索引
print(m.span(1))
(0,5)#返回第二個分組匹配成功的子串
print(m.group(2))
World#返回第二個分組匹配成功的子串的索引
print(m.span(2))
(6, 11)#等價於(m.group(1), m.group(2), ...)
print(m.groups())
('Hello', 'World')#不存在第三個分組
print(m.group(3))
Traceback (most recent call last):
File"", line 1, in
print(m.group(3))
IndexError: no such group
5. re.findall(pattern, string, flags=0) | findall(string, [pos, endpos])
1) 作用:遍歷匹配,以列表形式返回所有能匹配的子串,如果沒找到匹配的,則返回空列表
string:待匹配的字元串
pos:可選參數,指定字元串的起始位置,默認為0
endpos:可選參數,指定字元串的結束位置,默認為字元串的長度
2) 實例
importre#查找數字
pattern = re.compile(r'\d+')
result1= pattern.findall('runoob 123 google 456')print(result1)
['123', '456']
result2= pattern.findall('run88oob123google456', 0, 10)print(result2)
['88', '12']
6. re.finditer(pattern, string, flags=0) | finditer(string, [pos, endpos])
1) 作用:搜索string,返回一個順序訪問每一個匹配結果(match對象)的迭代器。找到匹配的所有子串,並把它們作為一個迭代器返回。
2) 實例
importre
pattern= re.compile(r'\d+')print(pattern.finditer('one1two2three3four4'))
for m in pattern.finditer('one1two2three3four4'):print(m)print(m.group())<_sre.SRE_Match object; span=(3, 4), match='1'>
1
<_sre.SRE_Match object; span=(7, 8), match='2'>
2
<_sre.SRE_Match object; span=(13, 14), match='3'>
3
<_sre.SRE_Match object; span=(18, 19), match='4'>
4
7. re.split(pattern, string, [maxsplit=0, flags=0]) | split(string, [maxsplit])
1) 作用:按照能夠匹配的子串將字元串分割後返回列表
pattern:匹配的正則表達式
string:要匹配的字元串
maxsplit:分割次數,maxsplit=1 分割一次,默認為0,不限制次數
flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫、多行匹配等
2) 實例1
importre
pattern= re.compile(r'\d+')print(pattern.split('one1two2three3four4'))
['one', 'two', 'three', 'four', ''] #注意後面沒有內容,是一個''字元
實例2
importre#匹配\W+表示非單詞字元一次或無數次
pattern = re.compile(r'\W+')#用非單詞字元分割
print(pattern.split('hello, world'))
['hello', 'world']
使用帶括弧的正則表達式則可以將正則表達式匹配的內容也添加到列表內
importre#帶括弧的正則表達式則可以將正則表達式匹配的內容也添加到列表內
pattern = re.compile(r'(\W+)')print(pattern.split('hello, world'))
['hello', ', ', 'world']
2. 怎麼在Path中添加Python路徑
⒈單擊開始,在搜索框輸入cmd,然後回車,就會出現命令行界面框後,在裡面輸入命令python後回車,安裝成功的話就可以看到python的版本信息。
拓展資料:
在python里建一個你自己的文件夾,專門存放你自己的模塊,我是在python.exe路徑下建了一個名為mypy的文件夾。現在我要將這個路徑(D:Python33mypy)添加到python的PYTHONPATH中去,使得:
import sys
sys.path
執行後,我的mypy也會同那些個路徑一起顯示出來,-說明成功了。
步驟:電腦,高級系統設置,看看有沒有名為:PYTHONPATH的變數,如沒有,新建吧。
3. python編程,我方和敵,開始時血量(HP)都是300,輪流攻擊,造成傷害1-100之間的隨機數,一方HP空結束
代碼如下(縮進請參考截圖):
4. 怎麼用python實現一個頁面的開發
去年春節期間,沒事報了一個pythonweb開發的網路課程,根據自己的學習情況來回答一下。
一個頁面的開發,應該是分前端和後端的。
關於後端
在python中有兩個最常見的開發框架:Django,flask。
Django大而全,什麼功能模塊都已經封裝好了,調用即可;flask小而精,沒有很高的封裝,但是有許多功能模塊,需要我們自己去集成。
當初學習的那個網路課程是用flask框架來做的,上手很簡單:
當初學習的時候能寫一個小的網站,本來想轉行做python後端開發的,但是後來還是接著做數據挖掘了橘旅臘,許久不用,倒是有點生疏了。總得來說,有幾大模塊:
路由
route()裝飾器把一個函數綁定到對應的URL上,Flask的URL規則基圓滑於Werkzeug的路由模塊。這個模塊背後的思想是基於Apache以及更早的HTTP伺服器主張的先例,保證優雅且唯一的URL。
模板渲染Jinja2
用Python生成HTML十分無趣,而且相當繁瑣,因為你必須手動對HTML做轉義來保證應用的安鎮液全。為此,Flask配備了Jinja2模板引擎。當然你也可以使用其他的模板引擎,但是建議你還是使用jinja2模板
請求對象request
你可以使用全局request對象訪問進入的請求數據。Flask處理進入的請求數據並允許你用這個全局對象訪問它。如果你工作在多線程環境,Flask內部保證你總會在當前線程上獲取正確的數據。
資料庫交互-Flask-SQLAlchemy
通過sqlalchemy對資料庫增刪改查,使用的是orm模式,不需要寫SQL語句。
在資料庫中,一個表就是一個python類,一個類的實例就是表中的行。
在開發過程中,會用到一些python的高級應用:
裝飾器:在許可權驗證的時候很需要用到
模塊的導入:防止循環導入
圖像處理:驗證碼生成
property使用:密碼加密時使用
關於前端
如果對前端不熟,想做一個小網站練練手,推薦你使用Bootstrap
裡面有各種的CSS樣式,各種組件,JS插件,還有一些網站實例供你參考,對前端HTML,CSS不是很熟悉的,可以通過這略微修改快速搭建一個前端頁面。
後記:
將來的數據挖掘工作者可能也需要懂網站後端開發,因為以後建模不會一直都是在單機中,可能會集成到網站中,實時數據流入模型,結果展示在網站上。
5. python list怎麼添加元素
list添加元素有幾個方法:
append:(每次只能加一個元素(這個元素也可以是一整個列表),加在最後)
6. python中循環里break的用法
你把break改成exit()就可以停止游戲了:
看我的截圖
break的用法:
break語句用來終止循環語句,即循環條件沒有False條件或者序列還沒被完全遞歸完,也會停止執行循環語句。
break語句用在while和for循環中。
如果您使用嵌套循環,break語句將停止執行最深層的循環,並開始執行下一行代碼。
exit()用於終止程序
7. 如何用python設計一個能實現添加、修改、刪除、顯示、退出等功能的小程序
可以使用 Python 中的字典(dictionary)來實現一個簡單的增刪改查程序。具體實現步驟如下:
創建一個空字典用於存儲數據。
通過循環菜單的方式,讓用戶可以選擇添加、修改、刪除、顯示、退出等功能。
根據用戶的選擇執行相應的操作,例如肆悶搏添加數據就讓用戶輸入鍵值對,修改數據就讓用戶選擇要修改的鍵和新值,刪除數據就讓用戶選擇要刪除的鍵,顯示數據就輸出整個字典,退出就結束程序。
下面是一個簡單的代碼示例:
data = {}裂祥 # 創建空字典用於存儲數據
while True:
print('請選擇操作:')
print('1. 添加數據')
print('2. 修改數據')
print('3. 刪除數據')
print('4. 顯示數據')
print('5. 退出程序')
choice = input('請輸入選項:')
if choice == '1':
key = input('請輸入鍵:')
value = input('請輸入值:')
data[key] = value
print('添加成功!')
elif choice == '2':
key = input('請輸入要修改的鍵:')
if key in data:
value = input('請輸入新值:')
data[key] = value
print('修改成功!')
else:
print('該鍵不存在!')
elif choice == '3':
key = input('請輸入要刪除的鍵:')
if key in data:
del data[key]
print('刪除成功!')
else:
print('該鍵不存在!')
elif choice == '4':
print(data)
elif choice == '5':
print('謝謝使用,再見!')
break
else:
print('輸入錯誤,請重新選擇。')
這個程序簡單易罩棗懂,可以根據自己的需要進行修改和擴展。
8. python滑鼠移動到敵人
使用Python可以通過調用操作系統的API函耐乎數來控制滑鼠的昌告悉移動,比如可以使用pyautogui庫中的moveTo()函數移動滑鼠友鉛至指定的位置,從而實現將滑鼠移動到敵人的功能。
9. python如何創建一個變數
python創建變數? 直接賦值就行了
比如:
a=0
b=[]
c=""
10. 用Python向數組中添加指定個數的元素
python中的list叫做列表,可以通過append方法在列表的末尾添加單個元素
x = [1,2,3]
x.append(4)
或者使用extend方法在列表末位添加多個元素,參數就變成了列表
x.append([4,5,6])
或者使用insert方法在任意位置添加元素,第一個參數是插入元素的位置,第二個參數是插入元素的值
x.insert(0,-1)