不在两位数之间时删除小数点

时间:2011-07-06 16:15:07

标签: c# regex

我正在清理搜索字符串,需要删除所有出现的句点,但是当它们在两位数之间时会保留小数点。

例如,如果我有一个字符串

  

599.75,Tigers。

然后我希望它回来

  

599.75,老虎

我在思考一句话:

  

strNewString = RegEx.Replace(strOrigString,strRegEx,string.Empty);

其中strRegEx只匹配。要移除但是我很难弄清楚如何只匹配。而不是周围的事情。

3 个答案:

答案 0 :(得分:8)

你应该利用the lookahead and lookbehind assertions。它们实际上并不匹配输入中的字符,而只是确定匹配是否可行 您可以使用负向前瞻和负面外观来做相反的事情,这是适当的。对strRegEx使用以下内容将匹配未被数字包围的句点:

(?<!\d)\.(?!\d)

答案 1 :(得分:2)

我读这个问题的方式是,只有当数字不是前后数字时才想匹配一个点。例如,在下面的列表中,您希望匹配除最后一个字符串之外的每个字符串中的点,因为这是唯一一个在其两侧都有数字的字符串。

abc.
.def
x.y
123.
.456
x.78
90.x
599.75

接受的答案(?<!\d)\.(?!\d)仅与前三个字符串匹配;它相当于:

a dot, ( (not preceded by a digit) AND (not followed by a digit) )

如果我的解释是正确的,你需要这样的东西:

(?<!\d)\.|\.(?!\d)

......相当于:

(a dot, not preceded by a digit) OR (a dot, not followed by a digit)

在任何情况下,在谈论文本匹配时都要尽可能准确,特别是在涉及使用外观时。

答案 2 :(得分:0)

您可以使用\.(?!\d)

之类的内容