我必须使用正则表达式来选择所有不以字母“p”开头的单词。例如:
book, laptop, promise
因此,正则表达式必须仅选择book, laptop
我的公式不起作用,不知道为什么:
寻找:\b(?!p)\w+\b
或者 \b(?!p){1}\w+\b
或者 \b(?![p])\w+\b
我的公式还选择了一些单个字母,但不仅仅是单词\w+
答案1
您正在寻找的是一个否定字符类 ( [^]
)。
这会起作用:
\b[^p\s]\w+
解释:
\b[^p\s]\w+
\b #word boundary, anchor to the beginning of a word
[^ ] #negated character class, matches any character except specified
p #literally "p"
\s #any whitespace character
\w #matches any word character
+ #quantifies previous expression between 1 and infinity times
请注意,不幸的是,这并不匹配任何单个字符的单词,例如“I”。您可以将表达式修改为\b[^p\s]\w+|(?<=\s)\b\w\b
。
答案2
您的正则表达式对我来说很好用,您只需匹配包含 1 个以上字母的单词:
- Ctrl+F
- 找什么:
\b(?!p)\w{2,}
- 查看 环绕
- 查看 正则表达式
- Find All in Current Document
解释:
\b # word boundary, make sure we haven't a word character before
(?!p) # negative lookahead, make sure we haven't the letter "p" after
\w{2,} # 2 or more word character, make sure we don't match single letter
截屏: