【问题标题】:How to allow only first punctuation mark in string with different marks sequence between words如何只允许字符串中的第一个标点符号在单词之间具有不同的标记顺序
【发布时间】:2016-10-24 05:14:37
【问题描述】:

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

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

结果我想得到这个:

hello, world.

最好同时知道如何在插入后传递这样的字符串以及如何避免在文本框中直接在字符串中的单词之间写入一个以上的标记和一个空格。

【问题讨论】:

    标签: c# regex string text punctuation


    【解决方案1】:

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

    在这里查看它的工作原理:https://regex101.com/r/di5Ebw/1。

    如果您需要一个特殊标点列表,我们可以在[,.] 中调整!

    (因此,在示例中,我给您的匹配项是您要删除的字符:只需将该匹配项替换为空字符串 - 正如您在底部的 SUBSTITUTION 面板中看到的那样)


    [编辑]扩展匹配案例。

    如果您不想打扰,请让它为您服务:(?<=\W)(?<! )\W+

    在这里查看它的工作原理:https://regex101.com/r/di5Ebw/2

    【讨论】:

    • 是的,如果我想弄清楚单词之间用空格分隔的标点符号,这种方式很有用
    【解决方案2】:

    .Net 正则表达式有一个标点类,因此实现所需结果的简单方法是搜索字符串(\w\p{P})\p{P}+ 并替换为$1。

    对于恰好处理问题中使用的少数标​​点字符的正则表达式,可以使用正则表达式(\w[.,?])[.,?]+。

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

    解释。这会查找一个单词字符 (\w),后跟一个标点符号,并捕获这两个字符。任何紧随其后的标点字符都与\p{P}+ 匹配。整个匹配被捕获替换。

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

    \p{P} 类别是defined here,表示为“所有标点符号”。标点符号也有好几个子类,不过最好看Unicode来了解它们。

    【讨论】:

    • 这种方式也很有用,但在我的情况下,我必须弄清楚单词之间用空格分隔的标点符号
    猜你喜欢
    • 2016-10-23
    • 2019-08-16
    • 2023-03-15
    • 2012-10-18
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多