作者OfficeGL (妤欣)
看板C_Sharp
標題[程式] 判斷文章裡出現關鍵字行數
時間Thu Apr 16 19:10:12 2020
目前查到的用法是用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://webptt.com/m.aspx?n=bbs/C_Sharp/M.1587035414.A.780.html
1F:推 mark0708: 感覺沒有用regex的必要? 用string.contains 會不會更好?04/16 21:14
不一樣~ 因為ccdata這個case 用你的方法也會找到
※ 編輯: OfficeGL (111.71.125.129 臺灣), 04/16/2020 21:39:29
2F:推 mark0708: 所以只找 "data" only?04/16 21:41
嗯嗯,就像是編譯器在找關鍵字一樣,
要找int 而不能是 intyyxx
※ 編輯: OfficeGL (111.71.125.129 臺灣), 04/16/2020 21:43:45
3F:推 mark0708: pattern = string.format(@"/b{0}/b", key); 04/16 22:15
4F:推 mark0708: 應該是沒加 @ 剛試了一下 04/16 22:20
5F:推 Litfal: 你有100多個關鍵字,那反過來用HashTable應該比較快 04/17 00:13
6F:→ Litfal: 把關鍵字都先丟到Hashset裡面,再把每個句子用字緣分割去 04/17 00:16
7F:→ Litfal: 拆成多個words,再檢查任一字是否在Hashset裡面 04/17 00:16
8F:→ Litfal: 字緣分割最簡單就用Split 04/17 00:17
9F:推 Litfal: 也可以用 | 去串接正則的多個關鍵字,應該也蠻快的 04/17 00:26
10F:推 jinmin88: 有點像compiler中的lexical parser 04/19 12:14
11F:→ disabledman: LINQ? 05/06 20:44