logo
Loading...

Regular_Expression問題 - Cupoy

我的想法是讓每一組數字在000~255這個區間才匹配成功可是它的結果卻是None請問一下我這樣的寫法...

pycrawler-2,pycrawler-2-d11

Regular_Expression問題

2020/03/09 下午 04:53
Python網路爬蟲討論版
劉明鑫
觀看數:9
回答數:3
收藏數:1
pycrawler-2
pycrawler-2-d11

我的想法是讓每一組數字在000~255這個區間才匹配成功

可是它的結果卻是None

請問一下我這樣的寫法是哪裡出了問題??

回答列表

  • 2020/03/09 下午 06:14
    李建勳
    贊同數:1
    不贊同數:0
    留言數:1

    嗨,你好,因為你這邊的regex的 [0-2][0-5][0-5] 意思是:

    第一個字元必須是0,1,2這三個數字

    第二個字元必須是0,1,2,3,4,5這六個數字

    第三個字元必須是0,1,2,3,4,5這六個數字


    因為你這邊的第二、三個字元不會包含到6,7,8,9這幾個數字,這也是問題發生的地方,所以你這邊的範圍實際上不會是000~255,像是056~099、156~199,這兩個範圍的數字都不會符合。


    字串必須要完成符合Regular Expression的規則才可以匹配成功,在這個例子裡test_string2包含了216.58.200.227這組IP,在匹配第一組數字216的時候,前兩位數字12有符合你這邊的規則,但第三位數字6因為不在[0-5]這個範圍中,所以不會匹配成功,後面幾組數字也是一樣的道理,但因為你這邊第一組已經沒有符合了,所以就算後面是符合的也不會匹配成功。


    這邊可以參考hint給的分組方式,然後再思考怎麼樣才會符合題目的條件。

  • 2020/03/09 下午 06:44
    賴文修
    贊同數:1
    不贊同數:0
    留言數:1

    他的匹配邏輯是在於一個單位,

    [0-2]代表你第一個字只配得到012

    [0-5]代表你第二個字只配得到012345

    [0-5]代表你第三個字只配得到012345

    ,問題是今天那個數值是216的話,你第3個[0-5]就配不到了


    因為他沒有數字大小的概念,所以他的思考方向是偏向於0-255這樣的數值可能會出現什麼樣的組合?


    25[0-5]           250-255

    2[0-4]\d         200-249

    199以下的話要怎麼寫就得下點功夫了,要寫得漂亮滿難的


    大概是像上面這樣 的方向

  • 2020/03/09 下午 09:34
    張維元 (WeiYuan)
    贊同數:1
    不贊同數:0
    留言數:2

    嗨,


    這邊出錯主要原因是因為 [0-2][0-5][0-5] 不包含 58 ,因為 58 只有兩個字元。這邊可以用 [01]?\d?\d 這樣的寫法表示 第一個位元是 [0,1],第二三個位元代表數字 ,前兩位的問號帶有表示至少一個或沒有。



    如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃