如何只允许字符串中的第一个标点符号在单词之间具有不同的标记序列

How to allow only first punctuation mark in string with different marks sequence between words

如果我只需要允许字符串中的第一个标点符号在单词之间具有不同的标点符号序列,例如,如果字符串是:

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

我想要得到的结果是:

hello, world.

最好知道这两者,如何在插入后传递这样的字符串,以及如何避免直接在文本框中的字符串中的单词之间写入多于一个标记和一个白色space。

你可以试试这个:(?<=[,.])[,.?]+.

看到它在这里工作:https://regex101.com/r/di5Ebw/1

如果您需要一份要删除的特殊标点符号列表,我们可以在 [,.] 中进行调整!

(所以在我给你的例子中,匹配是在你想要删除的字符上:只需用空字符串替换那个匹配 - 正如你在底部的替换面板中看到的那样)


[编辑] 扩展匹配案例。

如果你不想麻烦,让这个为你做:(?<=\W)(?<! )\W+

看到它在这里工作:https://regex101.com/r/di5Ebw/2

.Net 正则表达式有标点符号 class,因此获得所需结果的简单方法是搜索字符串 (\w\p{P})\p{P}+ 并替换为 </code>.</p> <p>对于恰好处理问题中使用的少数标​​点字符的正则表达式,可以使用正则表达式 <code>(\w[.,?])[.,?]+

(注意,上面显示的是正则表达式。它们的C#字符串是"(\w\p{P})\p{P}+""(\w[.,?])[.,?]+"。)

说明。这将查找一个单词字符 (\w) 后跟一个标点符号字符,并捕获这两个字符。 \p{P}+ 匹配任何紧随其后的标点字符。整个匹配被捕获取代。

\p{name} 构造是 defined here as "匹配 Unicode 通用类别中的任何单个字符或名称指定的命名块。 ".

\p{P} 类别是 defined here as "All punctuation characters". There are also several subcategories of punctuation, but it may be best to look at Unicode 了解它们。