我需要删除所有。与模式不匹配

时间:2012-10-30 14:44:15

标签: c# regex

我需要从文本中删除所有点,除非它们匹配模式[0-9] +。[0-9] + 例如,如果以下文字是我的输入:

abc. def. 123.45 ... 12. 

输出应如下所示:

abc def 123.45 12

由于

2 个答案:

答案 0 :(得分:1)

如果您使用的语言支持lookarounds,则可以使用此正则表达式:

(?<![0-9])\.|\.(?![0-9])

这匹配的数字不是以数字开头,或者后面没有数字。

C#示例:

string result = Regex.Replace(input, @"(?<![0-9])\.|\.(?![0-9])", "");

查看在线工作:ideone

答案 1 :(得分:0)

如果你的正则表达式支持负面外观(.NET确实令人难以置信),你可以使用它:

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

这只会匹配在它们之前或之后具有非数字字符的点。只需用空字符串替换结果。

如果没有,那么你可以这样做:

(?|(^|\D)\.|\.($|\D))

并替换为$1。这样做也是如此,但在比赛中包含了另外的角色。替换使匹配的角色重新到位。