ディレクトリ
、reモジュール
1、インポートモード
import re
2、の役割
文字列から特定してみます
3、基本的な文法
^
最初にマッチしますs = 'abdhgtsab' print(re.findall('^abd',s)) # ['abd'] 开头有就输出abd,没有就回返回[]
$が最後にマッチします
s = 'abdhgtsab' print(re.findall('ab$',s)) # ['ab'] 结尾有就返回ab,没有就返回[]
[]
一致する文字[]でs = 'acefghjkacefsdfsdf' print(re.findall('[acef]', s)) # 只要[]内的单个字符 ------------------------------------------------------------- ['a', 'c', 'e', 'f', 'a', 'c', 'e', 'f', 'f', 'f']
^[]
[]内の各文字要素に加えて取ら否定内部[]要素のs = 'acefghjkacefsdfsdf' print(re.findall('[^acef]', s)) ------------------------------------------------------ ['g', 'h', 'j', 'k', 's', 'd', 's', 'd']
.
(\ nを除く)任意の文字
s = 'acefghjkacefsdfsdf'
print(re.findall('a..', s))
------------------------------------------------------
['aba', 'ada']
*
文字の無限の数の前で0-
s = 'abaacaaaaa'
print(re.findall('a*', s))
------------------------------------------------------
['a', '', 'aa', '', 'aaaaa', '']
+
文字の無限の数の前での1-
s = 'abaacaaaaa'
print(re.findall('a+', s))
------------------------------------------------------
['a', 'aa', 'aaaaa']
?
文字0-1の前で
s = 'abaacaaaaa'
print(re.findall('a?', s))
------------------------------------------------------
['a', '', 'a', 'a', '', 'a', 'a', 'a', 'a', 'a', '']
{m}
メートルの前の文字
s = 'abaacaaaaa'
print(re.findall('a{5}', s))
------------------------------------------------------
['aaaaa']
{m,n}
文字MNの前で
s = 'abaacaaaaa'
print(re.findall('a{2,5}', s))
------------------------------------------------------
['aa', 'aaaaa']
\d
デジタル
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\d', s)
------------------------------------------------------
['1', '2', '3']
\D
非数値
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\D', s)
------------------------------------------------------
['s', ' ', ' ', ' ', ' ', ' ', 's', '+', '\n', '=', '$', '\t', '_', 's', ' ', ' ']
\w
数字/文字/アンダースコア
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\w', s))
------------------------------------------------------
['s', '1', 's', '2', '_', 's', '3']
\W
非数字/文字/アンダースコア
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\W', s))
------------------------------------------------------
[' ', ' ', ' ', ' ', ' ', '+', '\n', '=', '$', '\t', ' ', ' ']
\s
スペース/ \トン/ \ nは
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\s', s))
------------------------------------------------------
[' ', ' ', ' ', ' ', ' ', '\n', '\t', ' ', ' ']
\S
非スペース/ \トン/ \ nは
s = 's 1 s+\n=$\t2_s 3'
print(re.findall('\S', s))
------------------------------------------------------
['s', '1', 's', '+', '=', '$', '2', '_', 's', '3']
\
意義をキャンセル
s = 'aba\d'
print(re.findall(r'a\\d', s))
------------------------------------------------------
['a\\d']
.*
貪欲モード(最大化)、その結果を最大化するために、見つけるために探し続けます
s = 'abbbcabc'
print(re.findall('a.*c', s))
------------------------------------------------------
['abbbcabc']
.*?
直ちに停止した非貪欲モード(最小化)、
s = 'abbbcabc'
print(re.findall('a.*?c', s))
------------------------------------------------------
['abbbc', 'abc']
()
カッコ内の限り
s = 'abacad'
print(re.findall('a(.)', s))
------------------------------------------------------
['b', 'c', 'd']
A|B
AとBはする必要があります
s = 'abacad'
print(re.findall('a|b', s))
------------------------------------------------------
['a', 'b', 'a', 'a']
図4に示すように、モジュール方式
re.mathch() :検索の当初から、何の検索はnoneです、そこに検索
s = 'abc123\ndef456'
res = re.match('\d+', s) #从开头搜索数字,搜索到了就有,没搜索到就是none
print(res)
----------------------------------------------
None
s = '123abc123\ndef456'
res = re.match('\d+', s)
print(res) #返回的是一个对象
print(res.group()) #对象必须用group()返回
-----------------------------------------------------
<re.Match object; span=(0, 3), match='123'>
re.search() :最初の一致検索結果が見つかりません見つけるために
s = '123abc123\ndef456'
res = re.search('\d+', s)
print(res)
print(res.group())
------------------------------------------------------
123
re.split() :ルールに一致するように切断
s1 = 'abc324asdfk234lkjsf324lkj'
print(re.split('\d+', s1))
-----------------------------------------------
['abc', 'asdfk', 'lkjsf', 'lkj']
re.sub():マッチングルールに従って(フォーカス)を交換
s1 = 'abc324asdfk234lkjsf324lkj'
print(re.sub('\d+', '***', s1))
-----------------------------------------------
abc***asdfk***lkjsf***lkj
re.subn():マッチングルールの交換に応じて、カウント
s1 = 'abc324asdfk234lkjsf324lkj'
print(re.subn('\d+', '***', s1))
-----------------------------------------------
('abc***asdfk***lkjsf***lkj', 3)
図5に示すように、応用例
例:
文字列の場合1Life234234is beautiful234because234of persistence
モジュールの再2. コードの行の文章の削減Life is beautiful because of persistence
import re
s = 'Life234234is beautiful234because234of persistence'
# 结果为:Life is beautiful because of persistence
回答:
print(" ".join(re.sub('[0-9]', " ", s).split()))
二、入力モジュール
1、インポートモード
from typing import xxx
2、の役割
ジェネレータタイプ(cenerator)を提供する、機能を制限する、反復型(反復処理可能)、イテレータ型(イテレータ)データの三種類であってもよいです
図3に示すように、方法
from typing import Generator,Iterable,Iterator
# 参数的数据类型 返回值
def func(i: int, f: float, b: bool, lt: list, tup: tuple, dic: dict,g:Generator) -> tuple:
lis = [i, f, b, lt, tup, dic]
return tuple(lis)
# i, f, b, lt, tup, dic = func(1,2,3,4,5,6) # 不错误,只是不规范
def ger():
yield
res = func(1, 2, True, [1, 2], (1, 2), {'a': 1},ger())
print(res)
-----------------------------------------------------
(1, 2, True, [1, 2], (1, 2), {'a': 1})
三、コレクションモジュール
1、インポートモード
from collections import xxx
2、の役割
複雑なデータ型の場合
図3に示すように、方法
3.1 有名元组 namedtuple
from collections import namedtuple
point = namedtuple('point',['x','y'])
p = point(1,2)
print(p.x)
print(p.y)
---------------------------------------------------
1
2
3.2デフォルトの辞書defaultdict
from collections import defaultdict
# dic = {'a':1}
# print(dic['b'])
dic = defaultdict(lambda :'nan') # dic = {} # 如果找不到赋了一个默认值
dic['a'] = 1
print(dic['a'])
print(dic['c']) #找不到关键字c给c赋了一个默认值nan
----------------------------------------------------------
1
nan
3.3対両端キュー
と
データ記憶装置のリストを使用する場合、すばやくインデックスで要素にアクセスするが、要素を挿入および除去することは非常に遅く、リストは線形メモリ、大容量のデータであるため、効率が非常に低い挿入及び欠失です。
両端キューは、双方向リストの効率的な挿入および削除を達成キューに入れ、適しスタックすることです:
# lis = [1,2,3] # 线性表
# lis.append(4) #在后面追加4
# print(lis)
from collections import deque # 链表
de = deque([1,2,3])
de.append(4) #在最后面追加4
print(de)
de.appendleft(0) #在最前面追加0
print(de) # 默认删除左边的
de.popleft()
print(de)
-------------------------------------------------------------
deque([1, 2, 3, 4])
3.4カウンター
'''比较麻烦的方法'''
s= 'programming'
# dic = {}
# for i in s:
# if i in dic:
# dic[i]+=1
# else:
# dic[i] =1
# print(dic)
-------------------------------------------------------------
{'p': 1, 'r': 2, 'o': 1, 'g': 2, 'a': 1, 'm': 2, 'i': 1, 'n': 1}
# 新方法
from collections import Counter
s= 'programming'
c = Counter() # 字典
for i in s:
c[i] +=1 #在内部自己进行了一个判断
print(c)
-----------------------------------------------------
Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})