SeleniumBasicでスクレイピングをしているときによくつかう正規表現のまとめ
随時追記予定
■検索件数を取得する
例:食べログ検索画面で「新宿」と入力、でてきた件数を取得する
食べログで検索
検索結果:1~20 件を表示 / 全 4664 件
この「4664」を取得したい。
Windows10 エクセルでVBA操作
準備:検索対象の文字列から全角や改行コードなどを削除し正規表現を簡単にする(VBA)
vba
Dim mozi as String
mozi = "検索結果:1~20 件を表示 / 全 4664 件" '対象文
mozi = WorksheetFunction.Clean(mozi) '改行コードなどの削除
mozi = Replace(mozi, " ", "") '半角空白の削除
mozi = Replace(mozi, " ", "") '全角空白の削除
Debug.Print (mozi) '検索結果:1~20件を表示/全4664件
'↑無駄な空白が削除されました。
②検索結果:1~20件を表示/全4664件の4664を正規表現で取得する(VBA)
vba
Dim re As RegExp
Set re = New RegExp
Dim pattern As String: pattern = "全(\d+)件" '正規表現のパターン
Dim mc As MatchCollection
Dim m As Match
Dim Matches As MatchCollection
'正規表現の指定
With re
.pattern = pattern
.IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True)
.Global = True '文字列全体を検索するか(True)、しないか(False)
End With
Set Matches = re.Execute(mozi) '↑で準備した文字列に正規表現でのマッチングを実行
If Matches.Count > 0 Then
Debug.Print (Matches.Item(0)) '全4669件
' ↑この時点で「全4669件」です。なので
'このなかから席気表現パターンの()でくくった数値のみを取り出したい
set m = Matches.Item(0)
Debug.Print (m.SubMatches(0)) ’4669 やったー取得できた
End If
Pythonの場合
環境
Windows
Python3.8.3
python
import re
mozi="1~20 件を表示 / 全 4664 件"
pattern = "全(\d+)件"
mozi=mozi.replace(" ","") #半角空白の削除
mozi=mozi.replace(" ","") #全角空白の削除
ptn=re.compile(pattern) #正規表現のパターンを準備Patternオブジェクトがリターンされる
if result := ptn.search(mozi): #検索実行 合致するときはMatchオブジェクト無いときはNone
print(result.group(0)) #全4664件 マッチした文字列全体
print(result.group(1)) #4664 ()でくくった部分
全〇〇件の〇〇の抽出はしょっちゅうつかいますね。
その他にもよくつかう正規表現随時追記していきます。
もっと簡単な方法があればご指摘いただきたいです。