鉴于包含大括号{}
的文本,我需要提取除括号之外的所有文本,但包括换行符并保留字符串。示例文本:
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 :(得分: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);