Python re 正则匹配,表达式作为条件,但不获取条件内容的问题

2022-09-23 12:50:32 +08:00
 pppguest3962

如:

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] 问题是: 在正则的书写范畴,是否能写出'.'条件限定匹配,但结果不带上.这个符号的写法? 学习学习,谢谢解答!

2055 次点击
所在节点    Python
13 条回复
villivateur
2022-09-23 12:53:23 +08:00
re.search(r'[\d+]\.', url).group(1)
killva4624
2022-09-23 12:53:54 +08:00
hsfzxjy
2022-09-23 13:01:49 +08:00
你需要 后向零宽断言
ddsfeng
2022-09-23 13:10:06 +08:00
re.search(r'\d+(?=\.)',url).group(0)
ddsfeng
2022-09-23 13:16:24 +08:00
当然也可以这样:

re.search(r'(\d+)\.', url).group(1)

看你个人喜好了.
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
Alias4ck
2022-09-23 13:24:43 +08:00
应该是 lookahead and lookbehind
https://regex101.com/r/sKXCB8/1
ipwx
2022-09-23 14:01:26 +08:00
楼主应该把需求本身说清楚。

不然又是 XY problem 。
lookStupiToForce
2022-09-23 14:03:26 +08:00
5#的分组匹配是最简单的,但 4#的后行断言里英文句号也得加上转义,否则会匹配出来 888

正则可以在这个网站里快速上手,要不了你 20 分钟
https://regexlearn.com/
上手完要实际用了,想不起来可以去 playground 里测试,不是那种 debug de 到死的正则需求也要不了几分钟
https://regexlearn.com/playground
hxy100
2022-09-23 14:04:14 +08:00
fileid=re.search(r'.*/([^.]+)\..*?$',url).group(1)
pppguest3962
2022-09-23 17:17:02 +08:00
学习了,谢谢各位,其实问的是(?=)这种用法,以前从没用过,也没了解过这种用法,匹配又不存储的用法
ClericPy
2022-09-23 20:17:05 +08:00
什么鬼就零宽断言都来了... 这问的就是正经分组啊 re.search(r'(\d+)\.',url).group(1)

甚至连非捕获分组 (?:) 都用不着... 一楼连方括号都来了...
Alias4ck
2022-09-25 00:36:28 +08:00

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

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

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

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

© 2021 V2EX