我已经在
Java中使用这个正则表达多年了,无法让它工作:
(?:^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?: |$)
下列:
pattern.matcher("the cat in the hat").replaceAll(" ")
给了我猫帽子.另一个例子输入是下一个帽子的猫,它给了我下一个帽子的猫.
有没有什么方法可以让这个正则表达式替换工作,而不必将它们分解为每个单词的多个单独的正则表达式并尝试重复替换字符串?
解决方法
是的,你可以很容易地做到这一点你只需要使用
boundaries,这是你想要描述的:(?:^ |)只需这样做:
\b(?:the|and|at|in|or|on|off|all|beside|under|over|next)\b
您的原始文件没有捕获,但正如评论中提到的,如果您想捕获选项,则可以使用捕获而不是非捕获组:
\b(the|and|at|in|or|on|off|all|beside|under|over|next)\b