我正在清理搜索字符串,需要删除任何出现的句点,但是当它们在两位数之间时保留小数点.
例如,如果我有一个字符串
599.75,老虎队.
然后我希望它回来
599.75,老虎队
我在想一条像:
strNewString = RegEx.Replace(strOrigString,strRegEx,string.Empty);
strRegEx只会匹配.删除但是我很难搞清楚如何只匹配.而不是周围的事情.
你应该利用前瞻和后瞻性的断言.它们实际上并不匹配输入中的字符,而只是确定匹配是否可行.
您可以使用负向前瞻和负面外观来做相反的事情,这是适当的.使用以下内容strRegEx
将匹配未被数字包围的句点:
(?<!\d)\.(?!\d)
Run Code Online (Sandbox Code Playgroud)
我读这个问题的方式是,只有当它前面和后面都没有数字时,你才想要匹配一个点。例如,在下面的列表中,您希望匹配除最后一个字符串之外的每个字符串中的点,因为这是唯一一个两边都有数字的字符串。
美国广播公司。 .def xy 123. .456 x.78 90.x 599.75
接受的答案(?<!\d)\.(?!\d)
仅在前三个字符串中匹配;它相当于:
a dot, ( (not preceded by a digit) AND (not followed by a digit) )
Run Code Online (Sandbox Code Playgroud)
如果我的解释是正确的,你想要这样的东西:
(?<!\d)\.|\.(?!\d)
Run Code Online (Sandbox Code Playgroud)
...相当于:
(a dot, not preceded by a digit) OR (a dot, not followed by a digit)
Run Code Online (Sandbox Code Playgroud)
无论如何,在谈论文本匹配时尽可能精确是值得的,尤其是在涉及使用环视时。