[問題] 正則匹配不包含的符號

作者: 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