正则表达式标识包含空格的单词

时间:2013-04-22 02:52:00

标签: regex

我需要在文本中标识字符串并将其替换为空字符串。问题是,它并不总是作为一个单词本身存在。每个字母或一组字母之间将存在空格字符。例如:

对于“体面”一词,我可能会面临以下价值观。 D ec ent, De ce nt, 没有。

有没有办法使用“Decent”字作为任何正则表达式的输入来识别这些字符串? 我对正则表达式很新。请帮忙!!

TIA!

4 个答案:

答案 0 :(得分:1)

如果您使用

'D?e?c?e?n?t?'

它会将单词与额外的空格匹配

答案 1 :(得分:1)

表达式"D\s*e\s*c\s*e\s*n\s*t"将会这样做。每个字母后跟零个或多个空格。实际上\s是“空白字符”。如果您只想要文字空格,可以将\s*替换为*(空格后跟星号)。

答案 2 :(得分:1)

\bD\s*e\s*c\s*e\s*n\s*t\s*

所以你匹配D ec ent, De ce nt, De ce n t, decent Decent

但不是blade centimeter

答案 3 :(得分:0)

首先是一些代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class WordsWithSpaces {

    public static void main(String[] args) {
        String test = "Descent D escent De s  cent desce nd";
        String word = "descent";
        String pattern = "";
        for(int i=0; i<word.length();i++) {
            pattern = pattern+word.charAt(i)+"\\s*";
        }
        System.err.println("pattern is: "+pattern);
        Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(test);
        while(m.find()) {
            String found = test.substring(m.start(),m.end());
            System.err.println(found+" matches");
        }


    }

}

现在解释:\ s是空格的字符类。这包括空格和制表符以及(可能)换行符。在这段代码中,我取出了我要找的单词的每个字符,并附加“\ s”,其中“*”表示0或mor出现。

另外,为避免区分大小写,我在模式上设置了CASE_INSENSITIVE标志。

字符类在您选择的编程语言中可能没有相同的名称,但应该有一个用于空格。检查你的文件。