一个正则表达式的小问题

2019-10-21 21:16:27 +08:00
 JCZ2MkKb5S8ZX9pq
a = 'like/a2bc3d?param'
b = 'comment/a2bc3d?param'
2921 次点击
所在节点    正则表达式
14 条回复
jdhao
2019-10-21 21:21:36 +08:00
capture group? 你这模式都是一致的
JCZ2MkKb5S8ZX9pq
2019-10-21 21:56:34 +08:00
@jdhao 请问怎么搞?
因为实际案例中,后面的 params 是一直在变的,而前缀是限定的几种。
imn1
2019-10-21 22:04:52 +08:00
([^/]+/)([^/\?]+)\?.*$
lululau
2019-10-21 22:07:16 +08:00
'(?<=like/|comment/).*?(?=\?)'
ClericPy
2019-10-21 22:18:10 +08:00
虽然你发在 正则 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))
JCZ2MkKb5S8ZX9pq
2019-10-21 23:44:16 +08:00
@ClericPy 因为前缀限定,后缀不一定。
而且请审题,要取出'a2bc3d'。
你这两种方法,一个带了后缀,一个带上了前缀,并不完美啊。
JCZ2MkKb5S8ZX9pq
2019-10-21 23:50:00 +08:00
@lululau python 下会报错唉,不能加那个竖条。
JCZ2MkKb5S8ZX9pq
2019-10-21 23:52:52 +08:00
@ClericPy 不好意思,我实验了一下,第二种方法在 python 下是有效的。
(刚才在 sublime 直接用搜索试,返回的结果不一样。)
我学习一下,谢谢。
imn1
2019-10-21 23:59:24 +08:00
我写的你为何不看呢?

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')]
JCZ2MkKb5S8ZX9pq
2019-10-22 00:10:42 +08:00
@imn1 我在题目下 append 了一下,因为要指定特定的前缀,一开始没讲明白。
JCZ2MkKb5S8ZX9pq
2019-10-22 00:18:42 +08:00
另外我试了一下速度,@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
oneisall8955
2019-10-22 00:46:23 +08:00
https://imgchr.com/i/K1jiZR

v 站评论真的烦,不知道哪个辣鸡关键词
ClericPy
2019-10-22 09:56:42 +08:00
@JCZ2MkKb5S8ZX9pq 呃, 其实我那就是个简单的非捕获分组, 没想到性能, 这种简单取值没必要像你那样用零宽断言
JCZ2MkKb5S8ZX9pq
2019-10-22 12:16:42 +08:00
@ClericPy 嗯,之前没用过这个,搞不明白 group 出来的那几个东西。
昨天后来学了一下,现在稍微有点概念。感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX