【问题标题】:ReplaceAll String java regexReplaceAll String java 正则表达式
【发布时间】:2018-02-28 02:10:38
【问题描述】:

我有一个包含以下内容的字符串:

"Hello my name is (0.9%) and (15%) bye (10.5%) also (C9, B6)"

我想替换所有,所以我去掉了包含百分比但不包含其他数字的括号:

"Hello my name is and bye also C9, B6"

目前我有这个,但它删除了我所有的号码,知道如何解决它:

.replaceAll("[\\([0-9]\\%)]","");

【问题讨论】:

  • 您的正则表达式没有意义。你正在转义一个括号,但不是另一个,你只匹配一个数字。为什么% 被转义了?
  • 不确定我现在是否正在努力解决它:(
  • 最后的括号怎么了?

标签: java android regex replaceall


【解决方案1】:

可能是这样的吗?

"Hello my name is (0.9%) and (15%) bye (10.5%) also (C9, B6)".replaceAll("\\((?:\\d|\\.)+%\\)", "")

Demo

这里还会删除每个带括号的百分比后的单个空格:

"Hello my name is (0.9%) and (15%) bye (10.5%) also (C9, B6)".replaceAll("\\((?:\\d|\\.)+%\\) ", "")

给予:

Hello my name is and bye also (C9, B6)

【讨论】:

  • 你知道如果里面有逗号,我还可以如何扩展并删除括号:"Hello (bye, hello) again (hello)" 会变成"Hello bye, hello again (hello)"
  • 试试"Hello (bye, hello), and then (a, b,c) foo, bar (C9, B6)".replaceAll(" \\([a-zA-Z ,]+\\)", "")。它将仅删除带有类似单词的内容的括号,并保留数字。 (已检查,现在应该可以使用)
  • 谢谢,但基本上我需要删除不完整的括号,例如 "(hello""bye)" 并留下 "(hello)",有什么想法吗?
  • 我不确定您所说的“不完整的括号”是什么意思? “(C9,B6)”中的“(C9,”片段是否算作“不完整”?这似乎与原始问题越来越远。您可能想问另一个问题。评论只是不是很好那,你不能在这里缩进代码等等。
  • @KyrilKhaltesky 好吧,如果有限制,那么它们可能是有道理的......我会给你留下"(hello and hello) would be (hello)".replaceAll("(?:\\(([a-zA-Z]+)(?= ))|(?:(?<= )([a-zA-Z]+)\\))", "$1$2") 和提示你应该查找“积极前瞻”和“积极向后看”;)
【解决方案2】:

删除外括号并在可选点之前和之后添加匹配数字。

.replaceAll("\\([0-9]+?\\.?[0-9]+?\\%\\)", "");

注意:如果要允许前导点或尾随点,可以将“+”更改为“*”。

【讨论】:

  • 你知道如果里面有逗号,我还可以如何扩展并删除括号:"Hello (bye, hello) again (hello)" 会变成"Hello bye, hello again (hello)"
  • 抱歉,cmets 不是最适合格式化的。 final Pattern regex = Pattern.compile("\\(([\\w\\s]*?,[\\w\\s]*?)\\)"); final Matcher matcher = regex.matcher("Hello (bye, hello) again (hello)"); System.out.println(matcher.replaceAll("$1")); 这会在括号内创建一个捕获组,然后将匹配的版本替换为不带括号的版本。
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 2012-11-21
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多