0

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

对于“体面”这个词,我可能会面临以下价值观。得体,得体,得体。

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

蒂亚!

4

4 回答 4

1

如果你使用

'体面的 ?'

它将匹配带有额外空格的单词

于 2013-04-22T02:56:59.890 回答
1

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

于 2013-04-22T02:59:36.670 回答
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

于 2013-04-22T03:04:05.783 回答
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 标志。

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

于 2013-04-22T03:01:25.080 回答