如何允许字符串中只有第一个标点符号,单词之间的标记顺序不同
本文关键字:之间 顺序 单词 字符串 何允许 标点符号 第一个 | 更新日期: 2023-09-27 18:14:27
如果我需要在字符串中只允许第一个标点符号,并且单词之间的标点符号顺序不同,例如如果字符串是:
string str = "hello,.,.,.world.,.?,.";
in result I want get this:
hello, world.
这将是很好的知道这两个,如何传递这样的字符串后插入和如何避免写多个标记和一个空白的字之间的字符串直接在文本框。
您可以试试:(?<=[,.])[,.?]+
.
看它在这里工作:https://regex101.com/r/di5Ebw/1.
如果你需要有一个你想要删除的特殊标点符号列表,我们可以在[,.]
中调整!
(所以在这个例子中,我给你的匹配是你想要删除的字符:只是用空字符串替换匹配-正如你可以在底部的SUBSTITUTION面板中看到的)
[编辑]扩展匹配情况。
如果你不想麻烦,让这个为你做:(?<='W)(?<! )'W+
看它在这里工作:https://regex101.com/r/di5Ebw/2
。Net正则表达式有一个标点符号类,因此实现所需结果的一个简单方法是搜索字符串('w'p{P})'p{P}+
并用$1
替换。
对于只处理问题中使用的少数标点符号的正则表达式,可以使用正则表达式('w[.,?])[.,?]+
。
(注意,上面显示的是正则表达式。它们的c#字符串是"(''w''p{P})''p{P}+"
和"(''w[.,?])[.,?]+"
。)
解释。它查找后跟一个标点符号的单词字符('w
),并捕获这两个字符。紧跟其后的标点符号由'p{P}+
匹配。整个匹配被捕获替换。
'p{name}
结构在这里定义为"匹配Unicode通用类别或由名称指定的命名块中的任何单个字符。" 。
'p{P}
类别在这里定义为"所有标点字符"。标点符号也有几个子类,但最好还是看一下Unicode来理解它们。