我有以下任务:使用正则表达式替换提案中的单词 word 。我制作了以下代码:
p=Pattern.compile(word);
m=p.matcher(source);
source=m.replaceAll("<b><i>"+word+"</i></b>");
“source”-source string,“word” - 查找单词。但它不起作用。例如,有字符串“1234 123”。我需要在这个字符串中替换“123”字(单词可以用“。”或“”(空格)框起来),但我已经"<b><i>123</i></b>4 <b><i>123</i></b>"
,这是不正确的。我该如何更改代码?谢谢
答案 0 :(得分:1)
不确定我是否理解正确。但您可能希望为正则表达式添加单词边界:
p = Pattern.compile("\b" + word + "\b");
答案 1 :(得分:1)
这应该有所帮助。请注意,\\
用于转义\
。 [下面的代码允许突出显示多个单词]。
\b
匹配字边界,所以如果你用\b
包裹一个单词,正则表达式将匹配整个单词。
String source="1234 123 345 123456";
String words="123|345";
Pattern p = Pattern.compile("\\b(" + words + ")\\b");
Matcher m = p.matcher(source);
source=m.replaceAll("<b><i>$1</i></b>");
System.out.println(source);
<强>输出强>
1234 <b><i>123</i></b> <b><i>345</i></b> 123456
1234 123 345 123456
但请注意警告,如果您的输入文字已经标记,则您的字词可能不匹配 实施例
String source="1<b><i>23</i></b>";//This does not match 123 !
修改强>
如果您希望自己的单词以可选.
Pattern.compile("\\b(" + words + ")[.]?\\b");
答案 2 :(得分:0)
保持简单:
source.replaceAll("\\b" + word + "\\b", "$0 <b><i>$0</i></b>");
这是一个测试:
public static void main(String[] args) {
String source = "1234 123.";
String word = "123";
String newSource = source.replaceAll("\\b" + word + "\\b", "$0 <b><i>$0</i></b>");
System.out.println(newSource);
}
输出:
1234 123 <b><i>123</i></b>.
那么,这是如何工作的?
\b
表示“单词边界”,因此"\\bword\\b"
将与您的单词匹配(双反斜杠,因为java在反斜杠中吞下其中一个反斜杠)$0
表示整个匹配我保持简单,我的不使用模式 - 只需使用String API