C#的正则表达式不像我想要的那样工作

时间:2010-02-05 19:49:51

标签: c# regex

我有一个像这样的输入字符串:

  

\ pard \ nowidctlpar \ qj \ b0 \ scaps这个   达成协议\ scaps0并输入   到这个日期,\ {#DATEAGREEMENT#\},   之间和之间[删除]   (\ ldblquote [removed] \ rdblquote),及其   继承人和/或分配人   地址[删除],和   \ {#TPTPLAINTIFF#\},(\ ldblquote   原告\ rdblquote),个别地,   ___________________,和,   \ {#TPTPLAINTIFFATTORNEY#\},   (\ ldblquote原告\ rquote s   律师\ rdblquote)的   \ {#TTTATTORNEYFIRM#\}。\ par

我希望用正则表达式进行一些解析。

这是我正在使用的代码:

temp = Regex.Replace(temp, @"\\{#.*#\\}", "_____");

唯一的问题是它匹配最宽的集合,即它取出整个段落,因为段落以“#\}”结尾,我怎样才能匹配每个组? I.E.,这一段应该匹配4次而不是一次。

4 个答案:

答案 0 :(得分:4)

你有没有试过让它成为非贪婪的比赛?

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

答案 1 :(得分:1)

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

追加'?'到'*'将执行非贪婪的搜索。你的初始正则表达式正在进行贪婪的搜索,所以它会寻找最大可能的匹配。

答案 2 :(得分:1)

我记得,加上一个?将操作员从贪婪变为非贪婪,所以试试这个:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

答案 3 :(得分:1)

你正在寻找懒惰的评价:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____");

可能会这样做