2014-10-09 15 views
0

我必須格式化50k行的聊天記錄。如何使用正則表達式選擇多行?

源文件是純文本看起來是這樣的:

13. Mär. 01:32 - Walter: 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 

13. Mär. 06:15 - Horst: 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua. 
magna aliquyam erat, sed diam voluptua. 

只有兩個在整個聊天的人 - 沃爾特和霍斯特。 我需要兩個正則表達式,一個選擇Walter的所有聊天文本,另一個選擇Horst的所有聊天文本。

沃爾特·正則表達式應該選擇從例如這樣的文字:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 

的霍斯特正則表達式應該選擇從例如這樣的文字:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua. 
magna aliquyam erat, sed diam voluptua. 

這對我很重要,只選擇文本行而不是日期/時間/人員行。

UPDATE 首先,感謝您的快速回復。不幸的是,這並不能解決我的問題。 聊天文字有不同的數字行。

以某種方式,我不能用你的例子得到一個選擇。

我想在這裏: http://regexr.com/39m2a

我嘗試這樣做,而不是: 沃爾特:。 \ n(。

這選擇Walter:和第一行。有沒有選擇沃爾特:?

(我需要這個使用的文本格式來格式化InDesign文檔)

回答

0

這裏試試吧:http://refiddle.com/1iws
我已經修改了正則表達式,從而可以在你的工作數據,但再次你的數據不是結構良好雖然它不是可以寫一個正則表達式,將匹配它正確

1

這些actualy 2個問題

  1. 如何做好跨換行符匹配(在問題的標題問)
  2. 如何做一個匹配,它放棄日期/時間/人(在 設問體)

我會回答問題1:你想改變

做賽前在線分隔符/記錄分隔符。

此分隔符取決於工具(它不是正則表達式語言本身的一部分)。例如。對於awk,您可以更改RS變量(可以將其設置爲多個字符,例如冒號+換行符)。對於GNU grep,你可以使用-z。看到

How to find patterns across multiple lines using grep?

1

這裏不再討論是我的解決方案:

awk '$5~/Walter:$/{p=1} $5!~/Walter:$/&&$5~/:$/{p=0} p' 

awk -vname=Walter 'match($5,name":$"){p=1} !match($5,name":$")&&$5~/:$/{p=0} p' 

要過濾掉空和日期線,管通過

awk '$5!~":$"&&NF>0'