【问题标题】:Replacing unknown characters up to new line将未知字符替换到新行
【发布时间】:2018-06-14 05:40:18
【问题描述】:

我有一个包含不同值列表的字符串,如下所示:

Joe = 544
Sam = 43
Jenny = 126

我必须用新值替换 Sam 和他的值,或者完全删除新行之前的行,以便我可以再次重写他的值。我宁愿更换。

我找到了一些关于如何松散地做这两个方面的好资源,但我不知道如何将它准确地应用于我的问题。

我不知道 Regex 的边界,但我想它可以在不使用拆分的情况下做到这一点?我对正则表达式没有太多经验,语法对我来说真的很困惑。

我在想类似的伪代码:

String.replaceAll("Sam = ?*\n", "Sam = 83\n");

【问题讨论】:

  • 对于正则表达式,您需要使用replaceAll(),而不仅仅是replace()。

标签: java regex replace


【解决方案1】:

我认为你可以这样做:

String names = "Joe = 544\nSam = 43\nJenny = 126";
names = names.replaceAll("(?<=^|\\n)Sam = \\d+", "Sam = 83");

Demo

这将替换 Sam = 后跟一些数字,当 Sam 之前的内容是换行符字符串的开头(可能是 Sam 恰好出现在第一个的情况下)。 p>

【讨论】:

  • 非常感谢。看起来这会起作用。我肯定会保留这个,我可以想到很多项目可能需要我再次这样做。
  • @Robby:给新手的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票需要在至少 15 个声望点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请看【相关帮助中心文章】[1] [1]:stackoverflow.com/help/someone-answers
  • @Allan 我正要问,但我讨厌为分数而卑躬屈膝,理想情况下我们不应该这样做。但是,留下许多好问题而悬而未决的答案也对将来的任何人都没有帮助。
【解决方案2】:

这将为 Sam 添加一个新值。

text.replaceAll("Sam = .*\n", "Sam = 123\n");

正则表达式解释:.* 匹配出现在 'Sam = ' 之后的任何字符并将它们包含在匹配中,然后替换以 'Sam = ...' 开头的整个字符串。

【讨论】:

  • 这行不通,至少目前的形式不行 (see here)。
  • 感谢您的建议。这肯定也帮助了我。我实际上需要它来处理字符串而不仅仅是数字,但在你的帮助下,我也可以通过执行 .*+ 来改变 Tim 的答案,Tim 是对的,尽管它目前的形式不起作用。这对我有用:names = names.replaceAll("(?
  • 不错@TimBiegeleisen - 我修正了错字。
猜你喜欢
  • 2018-09-15
  • 2018-01-14
  • 2014-01-25
  • 2021-10-29
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多