1

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

abc. def. 123.45 ... 12. 

输出应如下所示:

abc def 123.45 12

谢谢

4

2 回答 2

1

如果您使用的语言支持环视,您可以使用这个正则表达式:

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

这匹配前面没有数字或后面没有数字的点。

C# 示例:

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

在线查看它:ideone

于 2012-10-30T14:47:10.967 回答
0

如果您的正则表达式风格支持负面外观(.NET 非常出色),您可以使用它:

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

这将仅匹配在它们之前或之后具有非数字字符的点。只需将结果替换为空字符串即可。

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

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

并替换为$1. 这也是一样的,但在匹配中包含了那个额外的字符。替换将匹配的字符放回原处。

于 2012-10-30T14:49:00.977 回答