如何获取字符串中的所有内容,但具体的模式

时间:2011-01-07 16:41:16

标签: java regex scala

另一个正则表达式问题:

我有一个字符串如下,

"This is a string, and I have a priority !1"

所以我想建立一个提取我的优先级的正则表达式,这个数字1前面是“!”。 提取它很容易,“!([1-4])”。但现在我想提取文本,将其删除!我怎么能这样做?

DETAIL :!1可以在字符串中的任何位置,所以这也很好:

"This is a string, !1 and I have a priority"

谢谢!

更新:我正在使用scala

2 个答案:

答案 0 :(得分:3)

(.*?)!([1-4])(.*?)

此正则表达式使用lazy quantifiers来获得更好的性能,并为您提供三个捕获组:

  • !1标记之前的文本(实际上是字符串中第一次出现标记之前的文本)。
  • 标记本身
  • 标记
  • 后面的文字

你也可以在答案中使用String.replace()Matcher.appendReplacement()之类的jarnbjo提及,但无论如何,这三组都能满足你的需要。

编辑:以下是正则表达式的正确版本:

(.*?)!([1-4])(.*)

根据评论,我使第二个量词变得贪婪,因此它与字符串的其余部分匹配。

答案 1 :(得分:3)

您可以用空字符串替换!1,!2,!3和!4:

String newString = "some string with !1 and more text".replaceAll("![1-4]", "");