LoginSignup
1
2

More than 1 year has passed since last update.

Pythonの正規表現でURLの特定の文字列から/スラッシュに囲まれた文字列を抽出

Last updated at Posted at 2021-05-12

URLである特定の部分から手前の/までの文字を抽出したい

いまいち文章だと分かりづらいので例を出します。

https://exsample.com/hendou/1234/category

というURLがあった場合。
末尾のcategoryのみ分かっていてhendouは動的なので特定できないとします。
この条件下で1234を抽出する正規表現です。

正規表現

とりあえずこれで動くと思います。

'[^/]*(?=/category)'

m = re.search('[^/]*(?=/category)','https://exsample.com/hendou/1234/category')
print(m.group())
# 1234

解説

[^/]*は/を除く0個以上の文字列です。
[^除外したい文字]で文字の除外ができます。
文字列を除外したい場合[^a-z]等の記述ができます。

別パターン

categoryが末尾ではなく手前だった場合

https://exsample.com/hendou/category/1234/hendou2

先ほどの正規表現を少し変えれば抽出できます。

m = re.search('(?<=category/)[^/]*', 'https://exsample.com/hendou/category/1234/hendou2')
print(m.group())
# 1234

categoryが手前にある為先読み肯定から後読み肯定になりました。

除外の別の表現

実はこの記事を投稿した時は[^/]*((?!/).)* と記述してました。
((?!除外したい文字列).)*でも同じ効果が期待できます。
ただ圧倒的に[^]のが簡素ですね、調査不足でした。

参考サイト

特定の文字列を含まないという正規表現 - Weblog on mebius.tokaichiba.jp
Python | 先読みと後読みを使ったパターンの記述
【Python】とっても便利な正規表現! - Qiita

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2