【问题标题】:Matching (and removing) words that only consist of special characters匹配(和删除)仅包含特殊字符的单词
【发布时间】:2020-05-11 20:03:41
【问题描述】:

我想匹配“单词”,即由空格包围的字符串或位于文本开头或结尾的字符串,但仅包含特殊字符。

我想出了以下模式,但不幸的是它与我的预期不符:

((?<!\w)\W(?!\w))+

对于以下输入:

word1 !!!$$£@€${/// word3 word€€}}}==4 word5 @£]][{

我希望在删除所有匹配项后返回以下字符串(单词 #2 和 #6):

word1 word3 word€€}}}==4 word5

【问题讨论】:

    标签: regex


    【解决方案1】:

    你要求的基本上是

    (?<!\S)\W+(?!\S)
    

    在哪里

    • (?&lt;!\S) - 匹配字符串的开头或空格字符之后的位置
    • \W+ - 0+ 个非单词字符
    • (?!\S) - 匹配字符串结尾或空白字符之前的位置。

    请参阅regex demo

    【讨论】:

    • 非常感谢!我正在使用.NET,所以所有格量词可以通过使用原子组来模拟。 #2、#3 和 #4 有什么区别?
    • @silkfire 实际上,我不确定你是否真的需要在比赛前删除空格,因此删除了评论,但如果你这样做,\s*(?&lt;!\S)\W+(?!\S) 将起作用。你也可以使用\s*(?&lt;!\S)[^\w\s]\W*(?!\S),它会使匹配更平滑,因为[^\w\s]匹配除空格之外的任何非单词字符,所以\s*肯定会在匹配[^\w\s]的文本之前停止。
    猜你喜欢
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2021-03-19
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多