如:
url = 'www.a888bcd.com/OA/20190913/112233445566.html'
fileid = re.search(r'\d+\.',url).group(0)
# 为了防错,实际上不能直接 group(0),search()很有可能是 None 也不一定
# 啰嗦的一步,认为多余
# fileid = re.search(r'\d+\.',url).group(0)[:-1]
问题只是锯了个栗子, 请教的问题不是获得这个栗子里的 fileid , 而是 \d+.去匹配 url 要的东西,那么必然最后会带上'.'这个正则匹配条件限定的符号,这个.在最后是是不需要的,还要多写一行去处理[:-1] 问题是: 在正则的书写范畴,是否能写出'.'条件限定匹配,但结果不带上.这个符号的写法? 学习学习,谢谢解答!
1
villivateur 2022-09-23 12:53:23 +08:00
re.search(r'[\d+]\.', url).group(1)
|
2
killva4624 2022-09-23 12:53:54 +08:00 1
|
3
hsfzxjy 2022-09-23 13:01:49 +08:00 via Android 1
你需要 后向零宽断言
|
4
ddsfeng 2022-09-23 13:10:06 +08:00 1
re.search(r'\d+(?=\.)',url).group(0)
|
5
ddsfeng 2022-09-23 13:16:24 +08:00
当然也可以这样:
re.search(r'(\d+)\.', url).group(1) 看你个人喜好了. |
6
TimePPT 2022-09-23 13:21:15 +08:00
如果仅仅是提取示例中的 112233445566 的话,试试 pathlib ?
from pathlib import Path url = "www.a888bcd.com/OA/20190913/112233445566.html" Path(url).stem |
7
Alias4ck 2022-09-23 13:24:43 +08:00 1
应该是 lookahead and lookbehind
https://regex101.com/r/sKXCB8/1 |
8
ipwx 2022-09-23 14:01:26 +08:00
楼主应该把需求本身说清楚。
不然又是 XY problem 。 |
9
lookStupiToForce 2022-09-23 14:03:26 +08:00
5#的分组匹配是最简单的,但 4#的后行断言里英文句号也得加上转义,否则会匹配出来 888
正则可以在这个网站里快速上手,要不了你 20 分钟 https://regexlearn.com/ 上手完要实际用了,想不起来可以去 playground 里测试,不是那种 debug de 到死的正则需求也要不了几分钟 https://regexlearn.com/playground |
10
hxy100 2022-09-23 14:04:14 +08:00
fileid=re.search(r'.*/([^.]+)\..*?$',url).group(1)
|
11
pppguest3962 OP 学习了,谢谢各位,其实问的是(?=)这种用法,以前从没用过,也没了解过这种用法,匹配又不存储的用法
|
12
ClericPy 2022-09-23 20:17:05 +08:00
什么鬼就零宽断言都来了... 这问的就是正经分组啊 re.search(r'(\d+)\.',url).group(1)
甚至连非捕获分组 (?:) 都用不着... 一楼连方括号都来了... |
13
Alias4ck 2022-09-25 00:36:28 +08:00
|