我有以下示例文本
"dont pick descri@ption but pick @description only"
哪种正则表达式会选择@description
而忽略descri@ption
?
我尝试了以下
(?=\s)@\w+?(?=\W)
->均未选择
(?=\S)@\w+?(?=\W)
->都选择
(?=\W)@\w+?(?=\W)
->都选择
答案 0 :(得分:2)
关于您尝试过的模式
由于(?=\s)
断言直接在右边的是空格字符,因此第一个模式不匹配。但是下一个要匹配的是@
,因此断言为假。
第二个和第三个模式匹配,因为断言(?=\S)
和(?=\W)
对于@
符号都是正确的。然后,这部分@\w+?(?=\W)
将匹配1个以上的字符,并确保最后有一个非单词字符都匹配。
您可以使用负向先行和向后搜索来断言左侧和右侧的内容不是非空格字符。
然后使用否定的字符类来匹配@
或空白字符
(?<!\S)@[^@\s]+(?!\S)
如果您想匹配单词字符:
(?<!\S)@\w+(?!\S)
答案 1 :(得分:0)
尝试:
(?:(\A|\s))(@[^@\s]+)(?=(\Z|\s))
“ @”之前必须是字符串的开头或空格。然后,必须紧跟一个或多个既不是空格也不是'@'的字符。最后,字符串后面必须带有空格或字符串结尾。