2014-12-10 65 views
0

給定的文本包含大括號{},我需要提取除大括號之外的所有文本,但包括換行符並保留字符串。示例文本:正則表達式從字符串中排除某些字符,但保留完整的字符串

Lorem ipsum dolor sit amet, elit. {Maecenas congue massa.} Endus. 
Pellentesque habitant {morbi} tristique senectus et turpis egestas. 
Mauris et orci. 

我已經使用\w(.*|\n)*,它保留括號和字符串複製原件。要刪除大括號,我嘗試否定\w([^{}]|\n)*。但是,這regex在每個支柱打破了字符串:

Lorem ipsum dolor sit amet, elit. 
Maecenas congue massa. 
Endus.[CR][LF]Pellentesque habitant 
morbi 

任何想法如何跳過括號,並保留一個字符串表示讚賞。我無法添加任何代碼去除或連接字符串。這隻能是regex

+0

這是相當不明確。你的意思是['[^ {}] +'](http://regexstorm.net/tester?p=%5b%5e%7b%7d%5d%2b&i=Lorem+ipsum+dolor+sit+amet%2c + ELIT。+%7bMaecenas + congue +馬薩。%7D + Endus。%0D%0aPellentesque +居住者+%7bmorbi%7D + tristique + senectus +等+ turpis + egestas。+%0D%0aMauris +等+奧奇。)?請注意,如果您想在一個匹配操作中匹配不連續的文本,則不可能。 – 2016-08-12 20:04:45

回答

0

/[{}]+/是你想要排除的。因此,這對我的作品在Perl ...

#!/usr/bin/perl 

my $string = "Lorem ipsum dolor sit amet, elit. {Maecenas congue massa.} Endus. 
Pellentesque habitant {morbi} tristique senectus et turpis egestas. 
et orci."; 


(my $result = $string) =~ s/[{}]+//g; 

print $result; 

更新(因爲您把一切你並不需要亂用捕捉組)

您認爲您的評論實現在.Net中(問題中沒有提到)。我無法測試.Net(我只是osx/unix),所以這只是一個盲目的建議。我不太確定.Net中如何配置替換模式。但基本思想是搜索0或更多任何不是{或}的字符,捕獲該字符,然後是未捕獲的{或},後面是0或更多任何不是{或}的字符。這應該保留你的換行符。

類似的東西這...

string pattern = "([[^{}]*)[{}]([^{}]*)"; 
    string replacement = "\1\2"; 
    string result = Regex.Replace(input, pattern, replacement); 
+0

你的正則表達式簡化了我的工作,但工作原理是一樣的。字符串在第一個支架處斷開,所以我只得到「Lorem ipsum dolor坐在amet,elit。」正則表達式在.Net應用程序中實現,我試圖避免任何應用程序代碼更改(新版本等)。我一直在使用Expresso進行測試,它的工作原理與應用程序相同。也許沒有解決方案? – cefeg 2014-12-10 23:45:46

+0

@cefeg,請參閱我的更新 – foundry 2014-12-11 01:02:51

+0

更新的工作方式與最初的建議類似,這是我決定使用的方式。在更新中,我們無法在應用程序中進行替換或替換。刪除大括號最終會改變C#代碼。感謝您的建議。 – cefeg 2014-12-12 01:34:01

相關問題