我正在清理搜索字符串,需要删除所有出现的句点,但是当它们在两位数之间时会保留小数点。
例如,如果我有一个字符串
599.75,Tigers。
然后我希望它回来
599.75,老虎
我在思考一句话:
strNewString = RegEx.Replace(strOrigString,strRegEx,string.Empty);
其中strRegEx只匹配。要移除但是我很难弄清楚如何只匹配。而不是周围的事情。
答案 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)