Java Regex表现不合逻辑。替换文本中的单词

时间:2015-01-11 04:02:14

标签: java regex replace

我不明白,为什么这个正则表达式不能取代“dürfen”...... 我有一个输入文本,需要替换很多填充词。但有些人因某些原因被忽略了。这必须与空间做一些事情,但我不明白。

    String input = "melanie rugullies eching trägt dirndl darüber das volksfestmadl stadt freising dürfen begeistern für tanzsport ";
    //does not work
    input = input.replaceAll("( dürfen )", " ");
    input = input.replaceAll("(\\sdürfen\\s)", " ");
    input = input.replace(" dürfen ", " ");

    //works ...
    input = input.replaceAll("(\\sdarüber\\s)", " ");
    input = input.replaceAll("(\\smöchte\\s)", " ");
    //input = input.replace(" dürfen", " "); //works but is not desired ...
    System.out.println(input);

输出

  

melanie rugulliesechingträgtdirndldas volksfestmadl stadt   freisingdürfenbegeisternfürtanzsport

预计“dürfen”不是输出的一部分..但它是!另一方面“darüber”消失了......

4 个答案:

答案 0 :(得分:1)

此代码可以正常工作(对于已翻译的字母没有问题),其正则表达式使字符串的间距正确:

input = input.replaceAll("\\W*\\bdürfen\\b\\W*", " ").trim();

这个正则表达式的一个小区别是它消耗任何非单词字符(即连字符等,而不仅仅是空格),并且放入空间。然后修剪该结果以处理在输入的开始/结束处发生的替换的边缘情况。

答案 1 :(得分:0)

这适用于python ......

# coding: utf-8

import re
s = "melanie rugullies eching trägt dirndl darüber das volksfestmadl stadt freising dürfen begeistern für tanzsport "
print(re.sub(' dürfen ','',s))
# melanie rugullies eching trägt dirndl darüber das volksfestmadl stadt freisingbegeistern für tanzsport 

只尝试替换" dürfen "代替"( dürfen )""(\\sdürfen\\s)"

答案 2 :(得分:0)

你的问题是你的正则表达式在搜索词的两边都包含空格。在正则表达式引擎替换单词" dürfen "的一个实例后,它在左侧和右侧没有留下单词的空间。因此,下一个单词替换失败(由于单词之前没有空格)。

您可以使用前瞻性正则表达式来解决此问题:

String input = "melanie rugullies eching trägt dirndl darüber das volksfestmadl stadt freising dürfen begeistern für tanzsport ";
input = input.replaceAll("\\s+(dürfen|darüber|möchte)(?=\\s)", "");
System.out.println( input );
//=> melanie rugullies eching trägt dirndl das volksfestmadl stadt freising begeistern für tanzsport

答案 3 :(得分:0)

没有问题,您的代码运行正常。


package com.stackoverflow;

公共类MainClass {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String input = "melanie rugullies eching trägt dirndl darüber das volksfestmadl stadt freising dürfen begeistern für tanzsport ";
    //does not work
    input = input.replaceAll("( dürfen )", " ");
    input = input.replaceAll("(\\sdürfen\\s)", " ");
    input = input.replace(" dürfen ", " ");

    //works ...
    //input = input.replaceAll("(\\sdarüber\\s)", " ");
    //input = input.replaceAll("(\\smöchte\\s)", " ");
    //input = input.replace(" dürfen", " "); //works but is not desired ...
    System.out.println(input);

}

}


输出

melanie rugulliesechingträgtdirndldarüberdasvolksfestmadl stadt freisingbegeisternfürtanzsport