Java正则表达式替换全部而不是替换所有单词
我在Java中使用这个正则表达式已经有很长时间了,但无法使用它:Java正则表达式替换全部而不是替换所有单词,java,regex,Java,Regex,我在Java中使用这个正则表达式已经有很长时间了,但无法使用它: (?:^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?: |$) 以下是: pattern.matcher("the cat in the hat").replaceAll(" ") 给我一顶帽子。另一个示例输入是下一顶帽子的猫入,它给了我下一顶帽子的猫 有什么方法可以让这个正则表达式替换工作,而不必为每个单词将它们分成多个单独的正则表达式,并尝试重复替换
(?:^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?: |$)
以下是:
pattern.matcher("the cat in the hat").replaceAll(" ")
给我一顶帽子。另一个示例输入是下一顶帽子的猫入
,它给了我下一顶帽子的猫
有什么方法可以让这个正则表达式替换工作,而不必为每个单词将它们分成多个单独的正则表达式,并尝试重复替换一个字符串 是的,你可以很容易地做到这一点,你只需要使用它,这就是你想要描述的:
(?:^ |)
只需这样做:
\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
您的问题是,前导空格和尾随空格包含在匹配项中,并且在两个匹配项中找不到字符 因此,在输入
的情况下,在\u hat中使用\u cat\u(下划线替换此处的空格,以使解释更清楚):
第一个匹配:the
,剩余字符串:cat\u在\u帽子中
第二个匹配:\u在
中,剩余字符串:帽子
不匹配
,因为它前面既没有空格,也没有(原始)字符串的开头
您可以改为使用,因为它们的行为类似于条件(即,if
):
(?您可能还需要匹配组:(\b(?:和|在|在|在|在|在|下|在|下|在|在|在|在|在|下|在|在|在|在|下|在|在|在|在|下|在|在|在|在|在|下|在|在|在\b
@sp00m是的,这个答案应该随您的修复程序更新。我不需要知道删除了什么,这样我就可以不使用捕获组了。它可以工作,谢谢,但我真的不明白为什么原始组不工作。@frhd好吧,这一切取决于OP是否需要捕获数据;)这是一个很好的问题描述,我更喜欢我的最终解决方案,但+1,因为这是一个更好的答案。
(?<=^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?= |$)