下記、それぞれ
- 前提条件
- 提示条件の肯定版
- 提示条件の否定版
python
1import re
2
3urls = [
4 "/news/20160104-vr-sports-training/",
5 "/news/20140703-kfc-tabehodai-report/",
6 "/news/20160218-leos-red-carpet-rampage-review/",
7 "/news/20150131-access/",
8 "/news/20160218-sci-hub/",
9]
10
11pattern1 = re.compile(r'^/news/\d{8}.+/')
12pattern2 = re.compile(r'^/news/\d{8}.+(?:access|report|review)/$')
13pattern3 = re.compile(r'^/news/\d{8}(?!.*(?:access|report|review)).*/$')
14
15for url in urls:
16 m1 = pattern1.search(url)
17 m2 = pattern2.search(url)
18 m3 = pattern3.search(url)
19 print("1. %s: %s" % ('Match' if m1 else 'Fail', url))
20 print("2. %s: %s" % ('Match' if m2 else 'Fail', url))
21 print("3. %s: %s" % ('Match' if m3 else 'Fail', url))
正規表現限定の可能性も考えて 3. も書きましたが否定先読みは可能な限り使わないほうがいいというのが個人的意見なので、オススメは 2. でマッチングして not
で否定です。そちらのほうが読みやすく優しいコード(Pythonicなコード)になるかと思います。
以下、上記の結果
1. Match: /news/20160104-vr-sports-training/
2. Fail: /news/20160104-vr-sports-training/
3. Match: /news/20160104-vr-sports-training/
1. Match: /news/20140703-kfc-tabehodai-report/
2. Match: /news/20140703-kfc-tabehodai-report/
3. Fail: /news/20140703-kfc-tabehodai-report/
1. Match: /news/20160218-leos-red-carpet-rampage-review/
2. Match: /news/20160218-leos-red-carpet-rampage-review/
3. Fail: /news/20160218-leos-red-carpet-rampage-review/
1. Match: /news/20150131-access/
2. Match: /news/20150131-access/
3. Fail: /news/20150131-access/
1. Match: /news/20160218-sci-hub/
2. Fail: /news/20160218-sci-hub/
3. Match: /news/20160218-sci-hub/
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/20 09:52