【问题标题】:How to extract and replace a particular pattern from string using regex?如何使用正则表达式从字符串中提取和替换特定模式?
【发布时间】:2014-06-17 05:20:40
【问题描述】:

我知道这个问题在 Stack Overflow 上已经被问过很多次了,但是正则表达式太难理解了。

我尝试了什么:

String sentence = "The #{adjective} brown fox jumps over the lazy dog";
            String requierd_sentence = sentence.replaceAll("[{*.*}]", "quick");
            System.out.println(requierd_sentence);

在这句话中,形容词的位置不是固定的——它们随着每个新的字符串/句子而变化。我需要做的是,用除了句子列之外的另一列中可用的所需字符串替换形容词。所以从列中获取字符串是可以的,但是正则表达式匹配在多次尝试时都失败了。

#{any string} 的正确正则表达式是什么?

  1. 上述字符串的示例输出将是 = The quick brown fox jumps over the lazy dog.
  2. 另一个示例输入,All that #{adjective} is not gold 应该输出 All that glitters is not gold.

现在上面两个句子在句子的不同位置都有#{adjective},所以我不能使用split。我必须使用正则表达式模式。

【问题讨论】:

  • 给出样本输入和输出。这比对预期输出的多行解释更有意义。
  • 正确转义 [{: sentence.replaceAll("\\[\\{*.*}]", "quick");

标签: java regex


【解决方案1】:

你可以使用这个(见demo):

String replaced = your_original_string.replaceAll("#\\{[^}]*}", "quick");

这是如何工作的?

  • #\\{ 匹配文字字符 *{
  • [^}]* 否定字符类匹配任何不是右大括号的字符
  • } 匹配右大括号
  • 我们将所有这些替换为“快速”

【讨论】:

  • 太棒了!它有效,但解释不好。然而,为精神喝彩,你关心的不仅仅是答案,而是解释,这样人们就可以学习了。你能用更好的方式解释一下吗?
  • @paul 完全重写了解释。这对你有用吗?让我知道。 :)
  • 谢谢,明白了。为演示点赞,这是一个学习的好东西regex
猜你喜欢
  • 1970-01-01
  • 2019-11-12
  • 2020-01-25
  • 2021-10-19
  • 2021-05-24
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多