PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   請問正則表示式(regular expression)能做到這樣嗎? (https://www.pcdvd.com.tw/showthread.php?t=971492)

darkangel 2013-08-29 10:55 PM

引用:
作者goddesschi
另外還有一點比較奇怪的
.*Test=([\w-\.]+),.*Value=([\w-\.]+),.*Expected=([\w-\.]+),.*Resolution=([\w-\.]+),.*Lux=([\w-\.]+)<.*

這個規則在expresso上面run沒有問題但是拿到ultraedit就出現語法錯誤
這種情況是為什麼?


我說過不同工具會有差異性,RE 也不是只有 Perl 系,還有 POSIX RE, POSIX Extended RE 等等,而且各工具定義也不盡相同,如果每用一種都要去查特殊跳脫字元用法就太浪費時間了,所以為什麼我給你的 pattern 都避開使用『工具自定義特殊符號』而使用通用的 [0-9] 這種表示方式,我記得 UE 裡 [\w] 等於 [A-Za-z],所以我看到 vxr 給 \w 馬上就認為定義不同,花不到一分鐘查了一下 expresso,果然在 expresso 裡 \w 是 Match any alphanumeric character 等於 [0-9A-Za-z]。
參考 http://www.codeproject.com/Articles...-Regex-Tutorial
所以你不能在 UE 裡用 \w 來 match [0-9],
此外你不能用 [\w-\.] 這意思就變成了 [0-9A-Za-z-\.] 當然會語法錯誤,你要在 [] 裡單獨 match - 要用 [\-] 或是像我前面給的小技巧 [-0-9] 放在最前面。(我故意這樣放是要讓你想為什我會這樣寫,全都讓我說穿就沒意思了)
多練習吧, expresso 看起來是好工具,不過我沒裝,還有沒特別需要還是盡量用通用的定義吧。

goddesschi 2013-08-30 09:44 AM

受教了,實在太感謝了 :ase
多練習多練習多練習 :cry:

darkangel 2013-08-30 10:26 AM

引用:
作者goddesschi
受教了,實在太感謝了 :ase
多練習多練習多練習 :cry:


人之患在好為人師,這只是互相討論分享心得,我從沒意思擺出教學的態度,其他網友也提供了一些不錯的解法跟工具也讓我學習不少,我以前有 PM 請教過你其他東西,你也很熱心的回答我,就當交個朋友,不用這麼客氣。
我真的覺得你程度很好,只是對 RE 接觸比較少而已,剛好碰到我略懂的皮毛,大家互相一下。

:p :p :p :p :p

vxr 2013-08-30 11:21 AM

expresso大多是用在.NET(跟我工作有關, 我才使用......)...
因此M$系產品的開發與調校應用到regex使用expresso通常是沒問題的...
還有用在JavaScript應該也是沒問題...

goddesschi 2013-08-30 07:07 PM

再請教大家一個問題,我原本是用grep去抓取需要的列(關鍵字:RESULT)再做RE
但是要用linux去下command比較麻煩(公司把ssh封了),請問用ultraedit作正則取代"沒有特定關鍵字的列為空"可行嗎?

我嘗試用 .*\[.{6}\].*可以抓到所有文章裡面有[RESULT]這個關鍵字的列
(有點像是grep 'RESULT' file.txt)
也可以針對那一列為所欲為
但是反其道而行想刪除沒有特定關鍵字的行(ex:刪除沒有[RESULT]的行)就不知道怎麼做了

.*\[^\[][RESULT]{6}[^\]]\.*
邏輯好像還是怪怪的 :laugh:
pattern真的錯了,我要再想一下....

shinnlu 2013-08-30 08:49 PM

引用:
作者goddesschi
但是反其道而行想刪除沒有特定關鍵字的行(ex:刪除沒有[RESULT]的行)就不知道怎麼做了

“想刪除沒有特定關鍵字的行”,不就是取出有關鍵字的那一行嗎?

goddesschi 2013-08-30 10:51 PM

引用:
作者shinnlu
“想刪除沒有特定關鍵字的行”,不就是取出有關鍵字的那一行嗎?

是,但是重點是ultraedit的RE只能作取代的工作不能做取出的工作吧
(ex100行裡面有60行有關鍵字,"取出"60行)
例如pattern=(.*\[RESULT\].*)
這樣也只能處理我要的那幾行卻不能刪除我不要的那幾行

我要輸出成文字檔->不能用expresso這個分析工具->只有比較熟悉ultraedit->覺得不能取關鍵行
所以我直覺是反其道而行想把沒有關鍵字的行取代成空白並且刪掉(100-40=60)

shinnlu 2013-08-30 10:59 PM

引用:
作者goddesschi
是,但是重點是ultraedit的RE只能作取代的工作不能做取出的工作吧
(ex100行裡面有60行有關鍵字,"取出"60行)
例如pattern=(.*\[RESULT\].*)
這樣也只能處理我要的那幾行卻不能刪除我不要的那幾行

我要輸出成文字檔->不能用expresso這個分析工具->只有比較熟悉ultraedit->覺得不能取關鍵行
所以我直覺是反其道而行想把沒有關鍵字的行取代成空白並且刪掉(100-40=60)

我都是用 RegexBuddy 來做測試 RE 或是跟你一樣的需求,取出我想要的部份
不懂為什麼一定要用 ultraedit,每個工具都有他擅長的部份。

darkangel 2013-08-30 11:11 PM

沒有想過把 grep 拿到 windows 裡來用嗎?
我在 Windows 裡會用這些工具:

http://gnuwin32.sourceforge.net/packages/grep.htm
http://gnuwin32.sourceforge.net/packages/sed.htm

此外也看過有人愛用 Cygwin,我個人不是很喜歡就是了。

goddesschi 2013-09-02 03:36 PM

引用:
作者shinnlu
我都是用 RegexBuddy 來做測試 RE 或是跟你一樣的需求,取出我想要的部份
不懂為什麼一定要用 ultraedit,每個工具都有他擅長的部份。


引用:
作者darkangel
沒有想過把 grep 拿到 windows 裡來用嗎?
我在 Windows 裡會用這些工具:

http://gnuwin32.sourceforge.net/packages/grep.htm
http://gnuwin32.sourceforge.net/packages/sed.htm

此外也看過有人愛用 Cygwin,我個人不是很喜歡就是了。


感謝你們的意見<(_ _)>
我好像很久前有用過一款MingW在windows下面模擬linux的指令來用
但是年代久遠已經不是很清楚怎麼用了,我先研究一下你們提供的東西
實在感謝提供方向 :hungry:


所有的時間均為GMT +8。 現在的時間是11:48 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。