看板 C_Sharp 關於我們 聯絡資訊
目前查到的用法是用regex的match 先用一個list <string>紀錄大約100個關鍵字 然後用for loop一個一個去檢查來源文字檔是否有maych到關鍵字 再印出出現關鍵字的行數 例如: pattern = string.format(“/b{0}/b”, key); foreach key in keyword list foreach Match x in regex.match(src, pattern) print at line xxx there is x.value 1. 請問有比這個還有效率的方法嗎 2.這個有點像是編譯器判別關鍵字 例如: data 則 ccdata ok data err data \n err 請問regex要怎麼定義,試都試不出來 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.125.129 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1587035414.A.780.html
mark0708: 感覺沒有用regex的必要? 用string.contains 會不會更好?04/16 21:14
不一樣~ 因為ccdata這個case 用你的方法也會找到 ※ 編輯: OfficeGL (111.71.125.129 臺灣), 04/16/2020 21:39:29
mark0708: 所以只找 "data" only?04/16 21:41
嗯嗯,就像是編譯器在找關鍵字一樣, 要找int 而不能是 intyyxx ※ 編輯: OfficeGL (111.71.125.129 臺灣), 04/16/2020 21:43:45
mark0708: pattern = string.format(@"/b{0}/b", key); 04/16 22:15
mark0708: 應該是沒加 @ 剛試了一下 04/16 22:20
Litfal: 你有100多個關鍵字,那反過來用HashTable應該比較快 04/17 00:13
Litfal: 把關鍵字都先丟到Hashset裡面,再把每個句子用字緣分割去 04/17 00:16
Litfal: 拆成多個words,再檢查任一字是否在Hashset裡面 04/17 00:16
Litfal: 字緣分割最簡單就用Split 04/17 00:17
Litfal: 也可以用 | 去串接正則的多個關鍵字,應該也蠻快的 04/17 00:26
jinmin88: 有點像compiler中的lexical parser 04/19 12:14
disabledman: LINQ? 05/06 20:44