【问题标题】:scala exactly matching a word in a given stringscala 完全匹配给定字符串中的单词
【发布时间】:2012-12-01 04:30:47
【问题描述】:

我正在尝试使用 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 而不是 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"

我该怎么做?

【问题讨论】:

    标签: regex scala replace


    【解决方案1】:

    这取决于您要如何定义“单词”。如果“单词”是您通过空格字符序列分割字符串时得到的,那么您可以这样写:

    "(?<=^|\\s)hello(?=\\s|$)".r.replaceAllIn("hello I am helloclass with hello.method","xxx")
    

    其中(?&lt;=^|\\s) 表示“在字符串开头或空格之前”,(?=\\s|$) 表示“后跟空格或字符串结尾”。

    请注意,这会将字符串Tell my wife hello. 视为(例如)包含四个“单词”,其中第四个是hello.不是hello。您可以通过以更复杂的方式定义“单词”来解决这个问题,但您需要先定义它。

    【讨论】:

    • 谢谢。那行得通。是的,我的话是用空格隔开的。你知道如何用变量形成这个正则表达式吗?我试过 ("(?
    • @yalkris 它到底是怎么不起作用的?如果你定义了 str,这应该可以工作
    • @yalkris:str 设置为什么?
    • 抱歉,它成功了。以前我在尝试var str: String="hello" ("(?&lt;=^|\\s)"+str+"(?=\\s|$)").r.replaceAllIn("hello.method in helloClass says hello","xxx")),但没有看到输出。但是当我使用println(("(?...xxx")) 时,我看到了输出。我不明白为什么我应该使用 println()
    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多