
如:
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 |
3 hsfzxjy 2022-09-23 13:01:49 +08:00 via Android 你需要 后向零宽断言 |
4 xqin 2022-09-23 13:10:06 +08:00 re.search(r'\d+(?=\.)',url).group(0) |
5 xqin 2022-09-23 13:16:24 +08:00 当然也可以这样: re.search(r'(\d+)\.', url).group(1) 看你个人喜好了. |
6 TimePPT PRO 如果仅仅是提取示例中的 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 应该是 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 &nsp;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 |