我正在尝试使用scala替换字符串中单词的完全匹配
"\\bhello\\b".r.replaceAllIn("hello I am helloclass with hello.method","xxx")
output >> xxx I am helloclass with xxx.method
我想要的是替换,如果这个词在helloclass和hello.method中完全是hello not hello
xxx I am helloclass with hello.method
如果输入字符串是
"hello.method in helloclass says hello"
"hello.method says hello from helloclass"
"hello.method in helloclass says Hello and hello"
输出应该是
"hello.method in helloclass says xxx"
"hello.method says xxx from helloclass"
"hello.method in helloclass says Hello and xxx"
我该怎么做?
答案 0 :(得分:4)
这取决于您想要如何定义“单词”。如果“单词”是您通过空白字符序列拆分字符串时得到的,那么您可以写:
"(?<=^|\\s)hello(?=\\s|$)".r.replaceAllIn("hello I am helloclass with hello.method","xxx")
其中(?<=^|\\s)
表示“以字符串开头或空格开头”,(?=\\s|$)
表示“后跟空格或字符串结尾”。
请注意,这会将(例如)字符串Tell my wife hello.
视为包含四个“字”,其中第四个是hello.
,不是 hello
。您可以通过以更复杂的方式定义“单词”来解决这个问题,但您需要先定义它。