最近在實作需要處理字串並且把它改成真實的判斷式,找 google 的過程中找到了一篇解答,當中剛好看到 Operator 這個套件,以下就用一些範例來示範~
實作
處理的範例: 1=1AND2<5OR8>9
可以使用re把字串處理成陣列
1 2
re.split("AND|OR", payload) # -> [1=1, 2<5, 8>9]
接著再使用迴圈+同樣的方法去處理掉=、>、<
在處理完之後就可以找到所有的 key 以及 value 的陣列
接著就是要把 AND、OR 找出來存下來,這邊我會會使用split('AND', 1)只切第一個找到的AND字串,因為像是 SQL Where 子句的功能要一個一個處理才行,否則最後判斷會出問題。
1 2 3 4 5
while re.search('(AND)|(OR)', payload) isnotNone: result = payload.split('AND', 1) if result[0] and ... # 判斷 AND 字串 result = payload.split('OR', 1) if result[0] and ... # 判斷 OR 字串
operator_list = ['>', '<', '='] if operator_list[0] == '>': result = operator.gt(2, 0) if operator_list[1] == '<': result = operator.lt('z01', 'z99') if operator_list[2] == '=': result = operator.eq('A', 'A')
使用以上方法可以比對運算子,而使用以下方法則可以比對AND以及OR
1 2 3 4 5
ex = ['AND', 'OR'] if ex[0] == 'AND': result = operator.and_(1, 1) if ex[1] == 'OR': result = operator.or_(1, 0)
而在今年參加八月舉辦的 COSCUP,並且在第一天的 after party 參加 LINE BoF 上就已經看到 LINE 開發的 Open Source - Armeria,它是基於 Java 所撰寫的一個非同步的專案,支援 Java8, Netty, HTTP/2, Thrift 以及 gRPC,當時聽團隊簡單介紹就覺得這個專案一定是個很不得的專案,只不過當時因為他們快速介紹兒少聽了很多細節,這次就把我聽到的細節告訴各位吧!