a = 'like/a2bc3d?param'
b = 'comment/a2bc3d?param'
re.compile(r'(?<=like/).*?(?=\?)')
这种我会写。like/a2bc3d
,然后再切一次。 1
jdhao 2019-10-21 21:21:36 +08:00 via Android
capture group? 你这模式都是一致的
|
2
JCZ2MkKb5S8ZX9pq OP @jdhao 请问怎么搞?
因为实际案例中,后面的 params 是一直在变的,而前缀是限定的几种。 |
3
imn1 2019-10-21 22:04:52 +08:00
([^/]+/)([^/\?]+)\?.*$
|
4
lululau 2019-10-21 22:07:16 +08:00
'(?<=like/|comment/).*?(?=\?)'
|
5
ClericPy 2019-10-21 22:18:10 +08:00 1
虽然你发在 正则 node... 但这种东西为什么要用正则呢...
a = 'like/a2bc3d?param' b = 'comment/a2bc3d?param' import os print(os.path.split(a)) print(os.path.split(b)) # ('like', 'a2bc3d?param') # ('comment', 'a2bc3d?param') a = 'like/a2bc3d?param' b = 'comment/a2bc3d?param' import re pattern = r'(?:like|comment)/(.*?)\?' print(re.search(pattern, a).group(1)) print(re.search(pattern, b).group(1)) |
6
JCZ2MkKb5S8ZX9pq OP |
7
JCZ2MkKb5S8ZX9pq OP @lululau python 下会报错唉,不能加那个竖条。
|
8
JCZ2MkKb5S8ZX9pq OP |
9
imn1 2019-10-21 23:59:24 +08:00 1
我写的你为何不看呢?
In [4]: import re In [5]: a = 'like/a2bc3d?param' In [6]: r = r'([^/]+/)([^/\?]+)\?.*$' In [7]: re.findall(r,a) Out[7]: [('like/', 'a2bc3d')] In [8]: b = 'comment/a2bc3d?param' In [9]: re.findall(r,b) Out[9]: [('comment/', 'a2bc3d')] |
10
JCZ2MkKb5S8ZX9pq OP @imn1 我在题目下 append 了一下,因为要指定特定的前缀,一开始没讲明白。
|
11
JCZ2MkKb5S8ZX9pq OP 另外我试了一下速度,@ClericPy 的方法满快的。
``` text = 'http://abc.com/liked/a2bc3d?param\nhttp://abc.com/comment/a2bc3d?param' start = time.time() pt1 = re.compile(r'(?:like|comment)/(.*?)\?') for i in range(100000): r = pt1.search(text).group(1) print(f'pt1: {time.time()-start}') start = time.time() pt2 = re.compile(r'([^/]+/)([^/\?]+)\?.*$') for i in range(100000): r = pt2.search(text).group(2) print(f'pt2: {time.time()-start}') ``` 结果 pt1: 0.20356273651123047 pt2: 1.4281411170959473 |
12
oneisall8955 2019-10-22 00:46:23 +08:00 via Android
|
13
ClericPy 2019-10-22 09:56:42 +08:00
@JCZ2MkKb5S8ZX9pq 呃, 其实我那就是个简单的非捕获分组, 没想到性能, 这种简单取值没必要像你那样用零宽断言
|
14
JCZ2MkKb5S8ZX9pq OP @ClericPy 嗯,之前没用过这个,搞不明白 group 出来的那几个东西。
昨天后来学了一下,现在稍微有点概念。感谢。 |