如何在特定标点符号之前不允许有空格
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, @" ?([.,]) ?(?: ?)*", " ");
首先我只允许字符串中有几个标点符号,例如只允许点和逗号。因为不需要,这里就不展示了,只是为了了解。
所以如果我的字符串是:
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, @" ?([.,]) ?(?: ?)*", " ");