【问题标题】:Regex find words between tags in a text where tags are repeated正则表达式在标签重复的文本中查找标签之间的单词
【发布时间】:2015-10-29 03:05:05
【问题描述】:

我正在使用 Matcher。

给定这个字符串:

Hi, I am a [l=BANANA] and I am [l=YELLOW]

我试过了

\\[l=(.+)\]\ 

但在这种情况下 Matcher.group(1) 是

l=BANANA] and I am [l=YELLOW

相反,我希望 Matcher.group(1) 成为

BANANA

和 Matcher.group(2) 是

YELLOW

无论如何...我要做的是消除[l =]标签,所以如果有一种方法可以转换

Hi, I am a [l=BANANA] and I am [l=YELLOW]

Hi, I am a BANANA and I am YELLOW

那就太好了!

【问题讨论】:

  • 检查\[l=(\w+)\]
  • 还有这个 str.replaceAll("(\[l=|\])", "")

标签: java regex string replace tags


【解决方案1】:

这是因为.+贪婪,这意味着它会尝试匹配尽可能多的字符。

您应该将其设置为不情愿,即.+?,这意味着它会尝试匹配尽可能少的字符。

更好的是,将点. 替换为“除] 之外的任何内容”表达式,即

"\\[l=([^\\]]+)\\]"

这是使用正则表达式将字符串与分隔符匹配的常用方法。

Demo.

【讨论】:

  • 在这种情况下也可以使用[^\\]\w+[A-Z]+ 来代替。 \[l=(\w+)\]
  • @Tushar 这完全有可能。但是,由于 OP 没有说他只想要 l= 之后的单词字符,因此可能会出现有人输入 [l=YELLOW SUBMARINE] 的情况。最通用的方法是将文本匹配到右括号,即使它有一个空格。
  • 很奇怪,你的正则表达式会出现这个错误:java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 12
  • @user2468425 我移动了斜线,并添加了一个 Java 演示。
猜你喜欢
  • 2014-04-10
  • 2019-04-15
  • 1970-01-01
  • 2014-07-26
  • 2012-07-20
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多