2013-04-18 27 views
0

我有一個特定格式的文本文件..正則表達式,用於選擇多條線路

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz 
asdasda........................................................ 
asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz... 

我需要一個正則表達式來重新使用查找和替換該文件 - Visual Studio中。 Desc字段值溢出到下一行。我需要將它們移回實際線路。最終的字符串應該像

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyzsdasda.........asdddddd.. 
    !c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz... 

我需要一個RE爲「desc =」,其次是任何東西,直到下一個!符號

+0

只是一個建議,但Notepad ++不支持RegEx查找和替換,並且可能更適合這種類型的數據操作。 – X3074861X

+0

我該怎麼做記事本++ – mhn

回答

1

找到Desc=([^\|\r\n]+)[\r\n](([^!\r\n][^\r\n]+[\r\n])*),與Desc=\1\2更換和重複,直到每一行與!(您可以測試這個使用^[^!]作爲搜索EXPR開始其應該找不到)。

或者找到[\r\n]+,用空字符串替換。此後找到!,替換爲\r\n!。這個建議有兩個缺點。它會暫時產生非常長的行,您的編輯(特別是vs)可能會或可能不會遇到困難,並且不正確地處理包含!的描述。

附錄: 您的輸入似乎是固定格式,最多爲Desc部分。如果確實如此,則可以應用替代#2步驟1,然後使用(!.{53}\|Desc=)/[\r\n]\1進行搜索/替換運行。

+0

在Visual Studio上,我用\ n {(^ [^!])。+}找到和\ 1替換..做了這項工作:) – mhn

1

正如@ X3074861X的評論所述,您可以使用Notepad ++。

輸入:

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz 
asdasda........................................................ 
asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz... 

對於查找和替換,選擇模式Regular expression與選項如下:

Find what\r\n[^!]

離開Replace with空白。

輸出:

!c_xyz|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyzsdasda........................................................sddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 
!c_abc|crby=112|crdate=12jun11|mdby=112|mddate=12jun11|Desc=xyz... 

截圖:

enter image description here

+1

偉大的答案,+1 – X3074861X