Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我需要从文本中删除所有点,除非它们与模式 [0-9]+.[0-9]+ 匹配,例如,如果以下文本是我的输入:
abc. def. 123.45 ... 12.
输出应如下所示:
abc def 123.45 12
谢谢
如果您使用的语言支持环视,您可以使用这个正则表达式:
(?<![0-9])\.|\.(?![0-9])
这匹配前面没有数字或后面没有数字的点。
C# 示例:
string result = Regex.Replace(input, @"(?<![0-9])\.|\.(?![0-9])", "");
在线查看它:ideone
如果您的正则表达式风格支持负面外观(.NET 非常出色),您可以使用它:
(?<!\d)\.|\.(?!\d)
这将仅匹配在它们之前或之后具有非数字字符的点。只需将结果替换为空字符串即可。
如果没有,那么你可以这样做:
(?|(^|\D)\.|\.($|\D))
并替换为$1. 这也是一样的,但在匹配中包含了那个额外的字符。替换将匹配的字符放回原处。
$1