Pythonの爬虫類(5)正規表現

正規表現:

ここに画像を挿入説明
正規表現を使用すると、それは言うまでもないHTMLから情報を抽出したいです。

一般的なマッチングルール:

ここに画像を挿入説明
\ D:任意の数と一致する
文字列の一致行の先頭:^
$を:文字列試合終了後は、
:改行以外の任意の文字に一致
+:マッチ1以上の式
*:1つ以上の式に一致スタイル

ライブラリの再パイソン

Pythonの再ライブラリの正規表現全体の実装を提供します

()メソッドにマッチ:

この方法では、文字列マッチングと正規表現を渡し、あなたはこの正規表現は、文字列に一致し検出することができます

import re
content="Hello 123 4567 World_This is a Regex Demo"
result=re.match('^Hello\s\d{3}\s\d{4}\s\w{10}',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group())#group可以输入匹配到的内容
print(result.span())#输出匹配的范围
試合ゴール

matchメソッド)を使用すると、文字列からコンテンツの一部を抽出したい場合は、あなたが(使用する必要があり、文字列にマッチさせることができる(、あなたは文字列の一部を抽出することを示している)、実際には、部分式の開始と終了をマークグループ呼び出し抽出結果(パラメータ)メソッド

import re
content="Hello 1234567 World_This is a Regex Demo"
result=re.match('^Hello\s(\d+)\sWorld',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group())#group可以输入匹配到的内容
print(result.group(1))#输入想要的数字
print(result.span())#输出匹配的范围
一般的な試合

私たちは、代わって* ==私たちが使用できるように、正規表現以上、私たちのワークロードを簡素化するにはあまりにも複雑である(改行を除く)任意の文字に一致し、一致するポイント(スターポイント)==、星(*)を書きます無制限の前の文字は、主ので、一緒に任意の文字を一致させることができます

import re
content="Hello 123 4567 World_This is a Regex Demo"
result=re.match('^Hello.*Demo$',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group())#group可以输入匹配到的内容
print(result.span())#输出匹配的范围
貪欲と非欲張り
import re
content="Hello 1234567 World_This is a Regex Demo"
result=re.match('^He.*(\d+).*Demo$',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group(1))#最后输入来的结果为7

D +である\上記のコードでは、私たちが意図1234567を取得したいが、結果は私たちに7アンダー貪欲試合を行いました。*多くの文字と一致します,,と、少なくとも一つの番号があり、具体的なはありませんそれは、これ7を得た,,試合123456に入れてどのように多く、したがって示し\ D +この条件を満たしています。

ここに画像を挿入説明

だから我々は、非欲張り一致することができます(。*?)

非欲張りマッチができるだけ一致する文字です、

import re
content="Hello 1234567 World_This is a Regex Demo"
result=re.match('^He.*?(\d+).*Demo$',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group(1))#最后输入来的结果为1234567

解釈:?。したがって、\ D +ちょうど合うように、一方で将来的には、デジタル化されたときに、バックこんにちは、空白文字に一致するように対処するためのD +デジタルバック\することはもはや試合、我々は1234567を取得するので、?

行うには、一致した場合には、可能な場合は、不足しているを避けるために、非貪欲マッチングを使用

修飾子:
import re
content='''Hello 1234567 World_This 
is a Regex Demo'''
result=re.match('^He.*?(\d+).*Demo$',content)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group(1))

ここに画像を挿入説明
私たちは、コンテンツだけで改行を追加しましたが、。、見つけることができる唯一のことはあり、それに加えて、改行文字にマッチします。?一致することはできません。その後、我々はタイトなパラメータを必要とし、re.S私たちは、エラーを修正することができます

import re
content='''Hello 1234567 World_This 
is a Regex Demo'''
result=re.match('^He.*?(\d+).*Demo$',content,re.S)
print(result)# SRE_Match对象,若返回此对象,则说明匹配成功
print(result.group(1))#最后输入来的结果为1234567

ここで追加、修飾子は
re.l:試合は大文字と小文字を区別しません
re.Sは:を含む、改行を含め、すべての文字にマッチする
...読むBaiduの背面自分自身でそれ

転送マッチング
import re
content='price is $5.00'
result=re.match('price is $5.00',content)
print(result)
#会打印出none

import re
content='price is $5.00'
result=re.match('price is \$5\.00',content)
print(result)
#<re.Match object; span=(0, 14), match='price is $5.00'>

規則的なパターンが出会い、特別なカスタム文字を照合すると、あなただけのバックスラッシュを追加することができます

それは全体の最初の文字列をスキャンして、成功したマッチを返します:メソッドをre.search

以前の私たちは、文字列の先頭からの一致方法は、試合の開始時に、ない一度初めから、それは試合に失敗しました


import re
content='Extra strings Hello 1234567 World_This is a Regex Demo'
result=re.search('^Hello.*?(\d+).*?Demo',content)
print(result)
print(result.group(1))

```总结:为匹配方便,能使用search就不用match
#  实战:

```python
import re
html='''<div id="song-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="秦齐">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>'''
result=re.search('<li.*?active.?singer="(.*?)">(.*?)</a>',html,re.S)
if result:
    print(result.group(1),result.group(2))

結果は以下のとおりです。風の過去

findAll()

検索の内容は、最初に一致する正規表現を返すことができますが、あなたはすべてのコンテンツが正規表現に一致取得したい場合、あなたはfindAllのを使用する必要があります

import re
html='''<div id="song-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="秦齐">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>'''
result=re.search('<li.*?active.?singer="(.*?)">(.*?)</a>',html,re.S)
if result:
    print(result.group(1),result.group(2))

2

import re
html='''<div id="song-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="秦齐">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>'''
results=re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>',html.re.S)
print(results)

戻り値置換文字列を交換した後の文字列は、各列の一致ではありません。re.sub

import re
content='Extra strings Hello 1234567 World_This is a Regex Demo' 
conntent=re.sub('\d+','',content)
print(content)

import re
content='Extra strings Hello 1234567 World_This is a Regex Demo' 
conntent=re.sub('\d+','Replacement',content)
print(content)

マッチングパターンの再利用のために正規表現オブジェクトに翻訳される文字列をre.compile

import re
content='"Hello 1234567 World_This
is a Regex Demo'"
pattern=re.compile('Hello.*Demo',re.S)
result=re.match(pattern,content)
print(result) 
公開された63元の記事 ウォン称賛12 ビュー4050

おすすめ

転載: blog.csdn.net/qq_45353823/article/details/104203791