#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