.net 正则表达式仅匹配整个单词

.net 正则表达式仅匹配整个单词,.net,regex,.net,Regex,我有以下示例文本 "dont pick descri@ption but pick @description only" 哪个正则表达式将选择@description并省略descri@ption 我尝试了以下方法 (?=\s)@\w+(?=\w)-->不选择其中任何一个 (?=\S)@\w+(?=\w)-->同时选择这两个选项 (?=\W)@\W+(?=\W)-->对您尝试的模式同时进行选择 第一个模式不匹配,因为(?=\s)断言直接在右边的是空白字符。但是下一个匹配的是@,因此断言是错误

我有以下示例文本

"dont pick descri@ption but pick @description only"
哪个正则表达式将选择
@description
并省略
descri@ption

我尝试了以下方法

(?=\s)@\w+(?=\w)
-->不选择其中任何一个

(?=\S)@\w+(?=\w)
-->同时选择这两个选项


(?=\W)@\W+(?=\W)
-->对您尝试的模式同时进行选择

  • 第一个模式不匹配,因为
    (?=\s)
    断言直接在右边的是空白字符。但是下一个匹配的是
    @
    ,因此断言是错误的

  • 第二个和第三个模式匹配,因为断言
    (?=\S)
    (?=\W)
    对于
    @
    符号都是真的。然后这部分
    @\w+?(?=\w)
    将匹配1+个单词字符,并确保最后有一个非单词字符,两者都匹配

您可以使用负的lookahead和lookahead来断言左侧和右侧的字符不是非空白字符

然后使用否定字符类来匹配
@
或空白字符

(?<!\S)@[^@\s]+(?!\S)
(?

如果要匹配单词字符,请执行以下操作:

(?<!\S)@\w+(?!\S)
(?试试:


“@”的前面必须是字符串的开头或空格。然后它后面必须是一个或多个既不是空格也不是“@”的字符。最后字符串后面必须是空格或字符串的结尾。

试试
(?不是
(?@ggorlen)区别在于正向查找
(?啊,是的,这些例子很有帮助。谢谢。@ggorlen在我刚刚更新的上一篇评论中看到了2个例子。这与中的“@description”匹配@description@abc’你的意思是吗?最初的问题并不是说边界是什么。
(?:(\A|\s))(@[^@\s]+)(?=(\Z|\s))