【问题标题】:Positive lookback regex正回溯正则表达式
【发布时间】:2018-01-23 15:00:56
【问题描述】:

我有一个这样的字符串:

String sample = "name:Bob | time:2:20";

我正在练习正则表达式并尝试使用以下代码尝试从 2:20 删除“:”

sample = sample.replace("(?<=0-9):","");

正则表达式在哪里不正确,因为它似乎不起作用。

【问题讨论】:

  • 您是否收到错误消息?
  • 0-9 匹配确切的字符串 "0-9"。我猜你想要[0-9],它匹配任何(单个字符)数字
  • @C-Otto 可能不是,正则表达式是有效的。 (我认为“” 引号是一个复制粘贴问题,可能是由于在法语语言环境中使用带有自动更正功能的 Word)
  • @C-Otto 我没有收到错误消息,但替换不起作用,是的,我希望删除数字后面的任何“:”
  • 另外replace 不支持正则表达式。使用replaceFirstreplaceAll

标签: java regex


【解决方案1】:

这应该可行:

sample = sample.replaceAll("(?<=[0-9]):", "");

但是可以通过使用捕获组而不是lookbehinds来提高效率:

sample = sample.replaceAll("([0-9]):", "$1");

其中[0-9] 是由从09 的字符范围组成的[character class],它被分组在(capturing group) 中,我们在替换模式中创建一个基于索引的$reference :我们不是用空字符串替换:,而是用数字单独替换数字和后面的冒号。

【讨论】:

  • 我会尽快标记为正确。可爱的谢谢。我发现正则表达式的语法很混乱
  • 这可能会令人困惑,但它非常强大,因此非常值得学习 RegEx。
  • @alwaysStuck123 我已经添加了解释,希望对您有所帮助!如果您在某些方面仍然感到困惑,请告诉我,我会尽力说清楚:) 如果您还没有,最好遵循完整的教程或课程,关于正则表达式有很多东西要学习。跨度>
猜你喜欢
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多