[操作疑難] regular expression 新手疑問

請問如果 input 係一封 letter, 有 Sender, receiver, cc, subject, letter body 咁計

****************************
Sender: abcd/+Receiver: abcde/-cc: efg
subject: testing
body:
Dear Name,
XXXXXXX,  abcd
......
*****************************

如果以 regular expression 抽返 sender , receiver, cc, subject , body, etc
(但又唔一要要有, e.g. 唔係封封信都有 cc )
咁可唔可以用一個 pattern 抽晒  Sender, Receiver , cc, Subject,  body 咁 玩?

sender , receiver, cc, subject , body 呢堆係固定嘢, 根本唔需要 reg exp

TOP

唔知想要啲乜嘢,
body 會係好多行?

grep -iE '(Sender:|Receiver:|cc:)'  target_file.txt

TOP

回覆 2# zenith


        但如果冇 CC, 咁  efg  什致冇 埋 CC:efg  呢?

TOP

唔知想要啲乜嘢,
body 會係好多行?

grep -iE '(Sender:|Receiver:|cc:)'  target_file.txt ...
cal22cal 發表於 2017-8-10 12:07


係...

而且 我唔係用 linux shell script 拎..
想match 到 就 ouput 一個 object.Sender, object.Receiver, etc...
如果冇  CC 就 由佢 null value....
但做到既係 1 個 pattern for 全部野, 一個 唔 match 全部死...

TOP

有optional capture架嘛,通常係'?'

TOP

逐行match係做唔到
因為本文中都可以出現 Subject: 等字詞
最少要分開 header 部分先

TOP

本文中都可以出現 Subject: 等字詞,亦都可以有好多可能
加少少嘢,matched pattern 一定要响頭道
e.g.
grep -E --color=always '^[[:space:]]*(Sender:|Receiver:|cc:)'  target_file.txt

TOP

我依家做法係先 capture CC 再capture 其他野一次過, 唔得再一樣樣咁 capture..

input 係 string (可以包 \n, \r\n, \t, 垃圾 characters, etc.)

TOP

本帖最後由 高原熊 於 2017-8-23 10:39 編輯

按第一個post段字黎試.
(?:Sender:\s([^\/]*)\/)(?:\+Receiver:\s([^\/]*)\/)(?:\-cc:\s(.*))?\n(?:subject:\s(.*)\n)?(?:body:\n([\S\s]*))\n

TOP