我有一个字符串和一些类似的词如下:-
String sentence = "I have @ty and @ty-1 and @ty-2 as a sentence";当我说
sentence = sentence.replaceAll("@ty", "space");产出如下:-
sentence = "I have space and space-1 and space-2 as a sentence";但是所需的输出是
sentence = "I have space and @ty-1 and @ty-2 as a sentence";我也试过
sentence = sentence.replaceAll("@ty\\b", "space");即使这样也不能提供正确的产出。
如何解决这个问题?
发布于 2014-07-14 06:53:19
您可以使用regex:
sentence = sentence.replaceAll("@ty(?!\\-)", "space");解释:
(?!\\-)是一个负面的展望,这意味着我们只寻找@ty,而后面没有一个破折号-。
发布于 2014-07-14 07:03:45
你在试图识别一个特殊的词界。如前所述,您已经尝试了内置在正则表达式语法中的"\b“单词边界。不幸的是,这也会触发符号"@“和"-”。
看来你只想在空间边界上工作。所以你必须自己写。这句话的意思是:
sentence = sentence.replaceAll("(?<=\\s+)@ty(?=\\s+)", "space");说明:(?<=\\s+)部分被称为一个只查找空格的正向查找。(?=\\s+)部分被称为正前瞻。这些外观试图在不消耗字符的情况下匹配字符,因此您可以很容易地使用表达式将"@ty“部分替换为您想要的”空格“。
有关更多信息,请参阅此regex教程。
发布于 2014-07-14 07:05:33
这是我的准则:
@ty(?= |$)这使用了一个前瞻性表达式。它的意思是"@ty,后面跟着空格或字符串的结尾“。我在这个网站http://regex101.com/上用下面的teststring和"g“修饰符测试了正则表达式:
“我把”ty“和”ty-1“和”ty-2“作为句子”ty“
https://stackoverflow.com/questions/24730871
复制相似问题