激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務器之家 - 腳本之家 - Python - python利用正則表達式提取字符串

python利用正則表達式提取字符串

2020-09-14 10:27風引 Python

相信大家在日常工作中經常會遇見在文本中提取特定位置字符串的需求,python的正則性很好,很適合做這類字符串的提取,所以這篇文章就給大家詳細講一下提取的技巧,并通過示例代碼講解,對大家理解很有幫助,有需要的朋友們下

前言

正則表達式的基礎知識就不說了,有興趣的可以點擊這里提取一般分兩種情況,一種是提取在文本中提取單個位置的字符串,另一種是提取連續多個位置的字符串。日志分析會遇到這種情況,下面我會分別講一下對應的方法。

一、單個位置的字符串提取

這種情況我們可以使用(.+?)這個正則表達式來提取。 舉例,一個字符串"a123b",如果我們想提取ab之間的值123,可以使用findall配合正則表達式,這樣會返回一個包含所以符合情況的list。

代碼如下:

?
1
2
3
4
import re
str = "a123b"
print re.findall(r"a(.+?)b",str)#
輸出['123']

1.1貪婪和非貪婪匹配

如果我們有一個字符串”a123b456b”,如果我們想匹配a和最后一個b之間的所有值而非a和第一個出現的b之間的值,可以用?來控制正則貪婪和非貪婪匹配的情況。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
import re
str = "a123b456b"
 
print re.findall(r"a(.+?)b", str)
#輸出['123']#?控制只匹配0或1個,所以只會輸出和最近的b之間的匹配情況
 
print re.findall(r"a(.+)b", str)
#輸出['123b456']
 
print re.findall(r"a(.*)b", str)
#輸出['123b456']

1.2多行匹配

如果你要多行匹配,那么需要加上re.S和re.M標志. 加上re.S后。將會匹配換行符,默認.不會匹配換行符。

代碼如下:

?
1
2
3
4
5
6
7
8
str = "a23b\na34b"
 
re.findall(r"a(\d+)b.+a(\d+)b", str)
#輸出[]
#因為不能處理str中間有\n換行的情況
 
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s輸出[('23', '34')]

加上re.M后,^$標志將會匹配每一行,默認^和$只會匹配第一行。

代碼如下:

?
1
2
3
4
5
6
7
str = "a23b\na34b"
 
re.findall(r"^a(\d+)b", str)
#輸出['23']
 
re.findall(r"^a(\d+)b", str, re.M)
#輸出['23', '34']

二、連續多個位置的字符串提取

這種情況我們可以使用(?P<name>…)這個正則表達式來提取。舉例,如果我們有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"',我們想提取這行日志里面所有的內容,可以寫多個(?P<name>expr)來提取,其中name可以更改為你為該位置字符串命名的變量,expr改成提取位置的正則即可。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search"
"Mozilla/5.0"'
reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)"
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print linebits
for k, v in linebits.items() :
 print k+": "+v

輸出的結果為:

?
1
2
3
4
5
6
status: 200
referrer:
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34size: 44
remote_ip: 192.168.0.1

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

延伸 · 閱讀

精彩推薦
1415
主站蜘蛛池模板: 久久99精品久久久久久园产越南 | 欧美黑大粗硬毛片视频 | 欧美日韩视频网站 | 草草视频在线播放 | 日日草视频 | 在线观看免费视频麻豆 | 欧美一级黄色免费看 | 欧美成人毛片 | 国产又粗又爽又深的免费视频 | 成人免费毛片明星色大师 | 国产精品久久久久久久亚洲按摩 | 羞羞羞网站 | 日韩色视频在线观看 | 国产精品高清一区 | 国产日韩一区二区三区在线观看 | 黄色片在线播放 | 国产精品久久久久久久av三级 | 欧美国产一区二区三区 | 精国产品一区二区三区四季综 | 欧美成人精品欧美一级 | 99这里有精品 | 五月j香国内婷婷 | 成人在线免费观看小视频 | 亚洲人成在线播放 | 看国产毛片 | 久久成人国产精品入口 | 污片在线观看视频 | 巨乳毛片 | 成年人在线视频 | 免费在线一区二区 | 91短视频在线 | 鲁丝一区二区三区不属 | 一级做a爱片久久毛片a高清 | 精精国产xxxx视频在线播放7 | 欧美成人视 | 午夜视频你懂的 | 亚洲第一成网站 | 大奶一级片 | 黄色一级视频 | av手机在线免费播放 | 国产精品伦视频看免费三 |