首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只替换完全匹配

只替换完全匹配
EN

Stack Overflow用户
提问于 2014-07-14 06:45:04
回答 5查看 1.7K关注 0票数 2

我有一个字符串和一些类似的词如下:-

代码语言:javascript
复制
String sentence = "I have @ty and @ty-1 and @ty-2 as a sentence";

当我说

代码语言:javascript
复制
sentence = sentence.replaceAll("@ty", "space");

产出如下:-

代码语言:javascript
复制
sentence = "I have space and space-1 and space-2 as a sentence";

但是所需的输出是

代码语言:javascript
复制
sentence = "I have space and @ty-1 and @ty-2 as a sentence";

我也试过

代码语言:javascript
复制
sentence = sentence.replaceAll("@ty\\b", "space");

即使这样也不能提供正确的产出。

如何解决这个问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-14 06:53:19

您可以使用regex:

代码语言:javascript
复制
sentence = sentence.replaceAll("@ty(?!\\-)", "space");

解释:

(?!\\-)是一个负面的展望,这意味着我们只寻找@ty,而后面没有一个破折号-

票数 1
EN

Stack Overflow用户

发布于 2014-07-14 07:03:45

你在试图识别一个特殊的词界。如前所述,您已经尝试了内置在正则表达式语法中的"\b“单词边界。不幸的是,这也会触发符号"@“和"-”。

看来你只想在空间边界上工作。所以你必须自己写。这句话的意思是:

代码语言:javascript
复制
sentence = sentence.replaceAll("(?<=\\s+)@ty(?=\\s+)", "space");

说明:(?<=\\s+)部分被称为一个只查找空格的正向查找。(?=\\s+)部分被称为正前瞻。这些外观试图在不消耗字符的情况下匹配字符,因此您可以很容易地使用表达式将"@ty“部分替换为您想要的”空格“。

有关更多信息,请参阅此regex教程

票数 2
EN

Stack Overflow用户

发布于 2014-07-14 07:05:33

这是我的准则:

代码语言:javascript
复制
@ty(?= |$)

这使用了一个前瞻性表达式。它的意思是"@ty,后面跟着空格或字符串的结尾“。我在这个网站http://regex101.com/上用下面的teststring和"g“修饰符测试了正则表达式:

“我把”ty“和”ty-1“和”ty-2“作为句子”ty“

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24730871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档