正则表达式从字符串中排除某些字符但保留完整字符串

时间:2014-12-10 22:06:56

标签: regex string

鉴于包含大括号{}的文本,我需要提取除括号之外的所有文本,但包括换行符并保留字符串。示例文本:

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

1 个答案:

答案 0 :(得分:0)

/[{}]+/是您要排除的内容。所以这对我来说非常有用......

#!/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);