如何在特定标点符号之前不允许有空格

How to do not allow whitespace before specific punctuation mark

首先我只允许字符串中有几个标点符号,例如只允许点和逗号。因为不需要,这里就不展示了,只是为了了解。

所以如果我的字符串是:

string str = "hello,world,,,hello,,   world... world ,,,, world ...";  

那我不允许再重复这个标记一次:

string filtr1 = Regex.Replace(str, @"(\.|,){1,}", m => m.Value.First().ToString()); 

然后如果单词之间有标点符号合并,我将其替换为白色-space并在其位置保留标记:

 string filtr2 = Regex.Replace(filtr1, @"[\,\.]", (m) => m + " "); 

而且单词之间也只允许一个白色-space:

  string result = Regex.Replace(filtr2, @"\s+", " "); 

所以现在我的结果是这样的:

  hello, world, hello, world. world , world .

但是我这里也需要,如果用户在标点符号前输入white-space,"hello , world"怎么不允许white-space 在特定符号点和逗号之前得到这个结果 "hello, world" 对于整个处理的字符串结果应该是这样的:

  hello, world, hello, world. world, world.

如果你有点创意 Mickbt,你可以在一个表达式中完成所有这些。

尝试搜索:

\s*(\.|,){1,}\s*

并替换为: (注意 space</code> 之后。 <a href="https://regex101.com/r/NSV7AN/1" rel="nofollow">Example</a>.</p> <p>在您的情况下,代码如下所示:</p> <pre><code>string result = Regex.Replace(str, @"\s*(\.|,){1,}\s*", " ");

祝你好运!

先规范化空格,这样写标点符号会更容易:

string result = Regex.Replace(str, @"\s+", " ");
result = Regex.Replace(result, @" ?([.,]) ?(?: ?)*", " ");