Pythonのビルトインモジュール入門 - モジュール再
1、REモジュール
(1)定期的に何ですか?
一緒に特別な意味や方法を説明した文字列(正規表現と呼ばれる)を持っているいくつかのシンボルの組み合わせを定期的に使用。または:定期的なルールは、物事のクラスを記述するために使用されます。(Pythonでは)、それは、Pythonで埋め込まれ、再モジュールによって達成されます。正規表現パターンは、Cで書かれたバイトコードの系列、にコンパイルした後、マッチングエンジンによって実行されます。
メタキャラクタ | 一致したコンテンツ |
---|---|
\ワット | マッチ(中国を含む)の文字、または数字、またはアンダースコア |
\ W | マッチング(中国語が含まれている)、または数字、またはアンダースコア以外のアルファベット |
\ sの | 空白にマッチします |
\ S | 任意の非空白文字にマッチします |
\ dは | マッチング番号 |
\ D | 非数値のマッチング |
\ A | 文字列一致の先頭から |
\ Z | それは、行の前のラップの唯一のマッチング結果であれば、文字列の末尾にマッチします |
\ nは | 改行にマッチします |
\トン | マッチングタブ |
^ | 文字列の先頭にマッチします |
$ | 文字列の末尾 |
。 | 改行以外の任意の文字と一致re.DOTALLフラグが指定されている場合、それは任意の文字が改行を含んで一致します。 |
[...] | 文字の文字セットと一致します |
... | 文字セットの文字以外のすべての文字にマッチします |
* | 左にゼロ以上の文字に一致します。 |
+ | 左に1文字以上の文字と一致します。 |
? | 左、非貪欲な方法に0または1文字に一致します。 |
{N} | 正確にn個前の表現と一致します。 |
{N、M} | N m回前の定義セグメントによって正規表現と一致するように、貪欲方法 |
から | またはbにマッチします |
() | 括弧内の式と一致する、また基を表します |
-------------------------------------------------- ----------------------------- -------------------一致モード--------------------------------------------
import re
<1>ワット文字、数字、アンダースコア、中国\
print(re.findall("\w","小明-Marry_dsb123啸天吃D早餐")) # \w 字母.数字.下划线.中文
<2> \ Wの代わりに、文字、数字、アンダースコア、中国
print(re.findall("\W","小明-Marry_dsb123啸天吃D早餐")) # \w 不是字母.数字.下划线.中文
<3> \ dのマッチ番号
print(re.findall("\d","十10⑩")) # \d 匹配数字
<4> \ Dは、非デジタルに一致します
print(re.findall("\D","十10⑩")) # \D 匹配非数字
<5> \文字列の先頭からのマッチは、任意の従来^ Aで始まります
print(re.findall("\Aa","asfdasdfasdfalex"))
print(re.findall("^a","alex")) # 以什么开头
<6> Z \は、文字列の末尾には、一般的に$終わるものと一致します
print(re.findall("d\Z","asfdasdfasdfalex"))
print(re.findall("x$","alex")) # 匹配什么结尾
<7> \ nは改行
print(re.findall("\n","alex\nwusir"))
<8> \トンマッチングタブ
print(re.findall("\t","alex\twusir"))
<9>の文字列に対応する文字列と一致します
print(re.findall("alex","alex\twusiralex"))
<10> [...]は、文字の文字セットと一致しました
print(re.findall('[0-9]',"小明-Marry_dsb123啸天吃D早餐"))
print(re.findall('[a-z]',"小明-Marry_dsb123啸天吃D早餐"))
print(re.findall('[A-Z]',"小明-Marry_dsb123啸天吃D早餐"))
<11> ^ []非文字の文字セットと一致しました
print(re.findall("[^0-9a-z]","123alex456"))
<12> *貪欲左に一致する0個以上の文字に一致します
print(re.findall("a*","marry,aa,aaaa,bbbbaaa,aaabbbaaa")) # 匹配*左侧字符串0次或多次 贪婪匹配
<13> + 1以上のマッチング左端の文字貪欲マッチング
print(re.findall("a+","alex,aa,aaaa,bbbbaaa,aaabbbaaa")) 匹配左侧字符串一次或多次 贪婪匹配
<14>?左非欲張りマッチにゼロまたは1つの文字に一致します
print(re.findall("a?","alex,aa,aaaa,bbbbaaa,aaabbbaaa")) # 匹配?号左侧0个或1个 非贪婪匹配
<15> {n}は、n個の一致の正確左前発現
print(re.findall("[0-9]{11}","18612239999,18612239998,136133333323")) # 指定查找的元素个数
<16> {N、M}は、正規表現定義断片の先頭にMと一致n回
print(re.findall("a{3,8}","alex,aaaabbbaaaaabbbbbbaaa,aaaaaaaaabb,ccccddddaaaaaaaa"))
<17> | bがaまたはbにマッチします
print(re.findall("a|b","alexdsb"))
<18>()は、括弧内の式に一致するだけでなく、グループを表します
print(re.findall("<a>(.+)</a>","<a>alex</a> <a>wusir</a>")) #分组
print(re.findall("<a>(.+?)</a>","<a>alex</a> <a>wusir</a>")) #控制贪婪匹配
<19>。定義さre.DOTALLとして改行以外の任意の文字に一致し、改行を一致させることができます
print(re.findall("a.c","abc,aec,a\nc,a,c")) # 匹配任意一个字符串(\n除外)
print(re.findall("a.c","abc,aec,a\nc,a,c",re.DOTALL))
<20>。の無い任意の関数があります
print(re.findall("-\d+\.\d+|-[0-9]|\d+",s))
<21> \ sがスペースにマッチします
print(re.findall("\s","alex\tdsbrimocjb")) # \s 匹配空格
<22> \ Sは非空白一致します
print(re.findall("\S","alex\tdsbrimocjb")) # \s 匹配非空格
質問:
有如下字符串:'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb' 的 alex wusir '找到所有带_sb的内容
回答:
s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb'print(re.findall("(.+?)_sb",s))
-------------------------------------------------- ----------------- -------------------------------一般的な方法---------------------------------
(1)のfindAllすべてのリターンにリストを見つけます
print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))
(2)検索停止のどこにでも見出さ一致する文字列のために、そのオブジェクトを返す。一致するコンテンツが.groupなければならないために()を求めます
print(re.search("a.+","lexaaaa,bssssaaaasa,saaasaasa").group())
(3)試合は、文字列の先頭から一致します
print(re.match("a.+","alexalexaaa,bssssaaaasa,saaasaasa").group())
質問
検索と一致するとの違い
どこでも検索から検索
それが見つからないことを続行しない場合は、最初からマッチを探します
両方のグループ()でそれを表示します
(4)スプリット - スプリット] [必要があります
print(re.split("[:;,.!#]","alex:dsb#wusir.djb"))
(5)サブ - 交換
s = "alex:dsb#wusir.djb"
print(re.sub("d","e",s,count=1))
(6)complie - マッチングルールの定義
s = re.compile("\w")
print(s.findall("alex:dsb#wusir.djb"))
(7)finditerは - イテレータを返します
s = re.finditer("\w","alex:dsb#wusir.djb") # 返回的就是一个迭代器
print(next(s).group())
print(next(s).group())
for i in s:
print(i.group())
(8)検索 - パケットPに命名?
ret = re.search("<(?P<tag_name>\w+)>\w+</\w+>","<h1>hello</h1>")
ret = re.search("<(?P<tag_name>\w+)>(?P<content>\w+)</\w+>","<h1>hello</h1>")
print(ret.group("tag_name"))
print(ret.group("content"))