我有一个变量字符串,当字符串在单词边界处作为一个整体匹配时,应该替换它.

我在这个正则表达式上取得了一些成功:

\b\QExample String to replace\E

或在Kotlin实施:

string.replace("""\b${Regex.escape(toReplace)}""".toRegex(), replacement)

然而,当toReplace类似于[template] Example String to replace时,这不起作用.

我想原因是,[不被视为"单词",因此与\b不匹配.

推荐答案

可以使用空白边界:

(?<!\S)\[template\] Example String to replace

完整Kotlin代码:

string.replace("""(?<!\S)${Regex.escape(toReplace)}""".toRegex(), replacement)

Kotlin相关问答推荐

DataSnapshot.getValue()未记录的奇怪行为

为什么";";.equals(1)在柯特林语中是有效的,但";";=1是无效的?

T和T有什么区别:任何>

Kotlin接口方法默认值&;可传递依赖项

为什么使用 return instance ?: synchronized(this) { instance ?: PreferenceParameterState(context) } 时无法获得单例?

Rabin-Karp字符串匹配的实现(Rolling hash)

从 HashMap 检索时的 NPE,即使 containsKey() 在多线程环境中返回 true

is return inside function definition 也是 kotlin 中的表达式

使用 Kotlin 协程时 Room dao 类出错

未为任务启用 Gradle 构建缓存

如何有效地填充 Gradle Kotlin DSL 中的额外属性?

IntelliJ 不会根据 ktlint 的期望对 Kotlin 导入进行排序

如何使 TextInputEditText 只读?

Kotlin 具体化的泛型不会按计划保持类型

更新到版本4.10.1/4.10.2后 Gradle 同步失败

RecyclerView SnapHelper无法显示第一个/最后一个元素

当被Spring代理类访问时,Kotlin实例变量为null

内联 onFocusChange kotlin

内联 Kotlin 方法没有覆盖报告

Android room DAO 接口不适用于继承