我需要识别文本中的字符串并将其替换为空字符串。问题是,它并不总是作为一个词本身存在。每个字母或一组字母之间会有空格字符。例如:
对于“体面”这个词,我可能会面临以下价值观。得体,得体,得体。
有没有办法使用“体面”字作为任何正则表达式的输入来识别这些字符串?我对正则表达式很陌生。请帮忙!!
蒂亚!
我需要识别文本中的字符串并将其替换为空字符串。问题是,它并不总是作为一个词本身存在。每个字母或一组字母之间会有空格字符。例如:
对于“体面”这个词,我可能会面临以下价值观。得体,得体,得体。
有没有办法使用“体面”字作为任何正则表达式的输入来识别这些字符串?我对正则表达式很陌生。请帮忙!!
蒂亚!
如果你使用
'体面的 ?'
它将匹配带有额外空格的单词
表达式"D\s*e\s*c\s*e\s*n\s*t"
会做到这一点。每个字母后跟零个或多个空格。实际上\s
是“空白字符”。如果您只想要文字空格,则可以替换\s*
为*
(空格后跟星号)。
\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
首先是一些代码:
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 标志。
字符类在您选择的编程语言中可能没有相同的名称,但应该有一个用于空格的名称。检查您的文档。