首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java使用regex在字符串中的奇数之间放置一个"-“

Java使用regex在字符串中的奇数之间放置一个"-“
EN

Stack Overflow用户
提问于 2015-07-24 20:42:47
回答 1查看 629关注 0票数 6

我试图在字符串中的所有奇数之间放置一个-。因此,如果一个字符串作为Hel776o传入,它应该输出Hel7-76o。破折号只能放在两个连续的奇数之间。

我正试图通过String.replaceAll()在一行中实现这一点。

我有以下几句话:

代码语言:javascript
复制
return str.replaceAll(".*([13579])([13579]).*","$1-$2");

如果有奇数,后面跟着奇数,则在它们之间放置一个-。但除了最后一场比赛外,这一切都是破坏性的。

如果我通过"999477",它将输出7-7而不是9-9-947-7。是否需要更多的分组,这样我就不会替换除了比赛之外的所有东西吗?

我已经通过字符串中的每个字符执行了一个传统的循环,但是我想用正则表达式替换一个一行。

编辑:我应该说我指的是return str.replaceAll(".*([13579])([13579]).*","$0-$1");,而不是$1$2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 20:46:23

从正则表达式中删除.*,以防止在一次匹配中消耗所有字符。

另外,如果您想重用以前匹配的某些部分,就不能使用它。例如,如果您的字符串为135,并且您将匹配13,那么您将无法在下一次与5的匹配中重用匹配的3

为了解决这个问题,请使用环顾四周机制,它是零长,这意味着它们不会消耗它们匹配的部分。

所以来描述一下有

  • 使用前的奇数请看(?<=[13579])后面,
  • 奇数后,它使用前瞻性(?=[13579])

所以你的代码看起来就像

代码语言:javascript
复制
return str.replaceAll("(?<=[13579])(?=[13579])","-");

还可以让regex只使用两个奇数中的一个来重用另一个奇数:

代码语言:javascript
复制
return str.replaceAll("[13579](?=[13579])","$0-");

return str.replaceAll("(?<=[13579])[13579]","-$0");
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31619444

复制
相关文章

相似问题

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