Regular_Expression問題
我的想法是讓每一組數字在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 😃😃😃