[问题] 正则匹配不包含的符号

楼主: sagwow (不是我)   2018-04-01 10:02:55
大家好,小弟是Python新手,最近在学爬虫遇到了一些问题。
我想在搜寻任意字串,字串内容不确定,
只想要字串内有":(冒号)"的就不回传,若字串不含冒号,就回传整个字串。
我试了很多方法都没办法得到我想要的结果QQ
像是我用print(re.search(r'.*?(?!:).*?$','123:abc'))
第一组.*?和第二组.*?分别表示冒号前后的任意字串,然后中间(?!:)想排除掉冒号。
但是得到的结果是<_sre.SRE_Match object; span=(0, 7), match='123:abc'>
无法排除掉QQ
麻烦大家解答了,感恩<(__ __)>
作者: stucode   2018-04-01 10:36:00
r = s if ':' not in s else None # s = '123:abc'
作者: s860134 (s860134)   2018-04-01 11:30:00
[^:]
作者: neil987 (R5大小姐-EX人品崩坏)   2018-04-01 11:31:00
如果是只要有冒号就不要 用楼上的in就好了
作者: s860134 (s860134)   2018-04-01 11:31:00
在[]中 ^前坠代表反向匹配... 你可以在再看一下书@@https://regex101.com/#python 这网站玩玩看八
作者: neil987 (R5大小姐-EX人品崩坏)   2018-04-01 11:35:00
如果要找:在哪里 用[:]就好了吧
作者: s860134 (s860134)   2018-04-01 12:14:00
发现这样会把 123:234 切开 QQ(?:[ ]|^)([^:\s]+)(?!:)\b 取 group(1) 不知道有没漏结论上还是像一楼另外筛选比较干净简单
作者: cutekid (可爱小孩子)   2018-04-01 13:13:00
楼上的解法 123-123:abc 会 match 唷
作者: s860134 (s860134)   2018-04-01 16:48:00
(?:[ ]|^)([^:\s]+)(?!:)(?=\s|$)好像越弄越肥越看不懂惹...(?:[ ]|^)([^:\s]+)(?=\s|$) 断言找头找尾好像就可以
作者: coeric ( )   2018-04-01 20:56:00
if re.search(':',string)==None:print string是我误会了原意,还是?
作者: stucode   2018-04-01 22:51:00
那句的意思是,如果字串 s 中不包含冒号就把 s 赋值给变量 r,否则就把 r 设为 None。s 是你要搜寻的任意字串就是文中第三句描述的功能。不过重新看了一下内文,你想要的是把字串中的冒号去掉吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com