如何精确匹配字符串中的所有单词,包括那些以 '!,?.'"' 结尾但不使用正则表达式与任何其他标点符号匹配的单词?

How do I exact match all the words in a string includes those ends with '!,?.'"' but do not match those with any other punctuation using regex?

比如我要搜索的模式是apple

我要搜索的字符串是 apple apple@323 apple.. apple??...!! apple??%% Ilovesapple

预期匹配:

apple 
apple.. 
apple??...!!

我要匹配所有准确的单词,唯一的例外是单词以标点符号结尾 !,?.'"

这是你想要的吗?

\bapple[!,?.'\"]*(?=\s+|$)

Regex Demo

详情:

  • \b 'apple'
  • 的字边界
  • apple您要搜索的图案
  • [!,?.'\"]* 您要匹配的末尾的特殊字符出现零次或多次
  • (?=\s+|$) Positive Lookahead 以确保匹配词后跟白色 space 或行尾。

另一个版本

另一种可能性是,如果您在 'apple' 之前不允许任何非 space 字符:

(?:\s+|^)(apple[!,?.'\"]*)(?=\s+|$)

Regex Demo 注意 @apple? 不匹配,因为它以 @

开头

比赛参考Group 1

详情:

  • (?:\s+|^) 白色的非捕获组 space(s) 或 'apple'

    之前的行首
  • ( 捕获组开始(捕获到第 1 组)

    • apple您要搜索的图案
    • [!,?.'\"]* 您要匹配的末尾的特殊字符出现零次或多次
  • )捕获组结束(捕获到第1组)

  • (?=\s+|$) Positive Lookahead 以确保匹配词后跟白色 space 或行尾。