正则表达式从字符串中删除圆括号

时间:2013-10-03 09:14:24

标签: java

我有一个字符串

String s="[[Identity (philosophy)|unique identity]]";

我需要解析它。

s1 = Identity_philosphy 
s2= unique identity

我尝试过以下代码

Pattern p = Pattern.compile("(\\[\\[)(\\w*?\\s\\(\\w*?\\))(\\s*[|])\\w*(\\]\\])");
  Matcher m = p.matcher(s);
while(m.find())
{
....
}

但模式不匹配..

请帮助

由于

3 个答案:

答案 0 :(得分:1)

使用

String s="[[Identity (philosophy)|unique identity]]";
String[] results = s.replaceAll("^\\Q[[\\E|]]$", "")    // Delete double brackets at start/end
      .replaceAll("\\s+\\(([^()]*)\\)","_$1")           // Replace spaces and parens with _
       .split("\\Q|\\E");                               // Split with pipe
System.out.println(results[0]);
System.out.println(results[1]);

输出:

Identity_philosophy
unique identity

答案 1 :(得分:0)

您是否尝试过使用此类内容来帮助您? RegExr

使用该网站,我能够创建一个与您想要的完全匹配的模式。

这可以在该网站上使用:(\[\[)|(\()|(\))|(\|)|(\]\])

插入双反斜杠,使其在Java中起作用:(\\[\\[)|(\\()|(\\))|(\\|)|(\\]\\])

答案 2 :(得分:0)

您可以使用

CreateMap<AFirstLoadViewModel, A>()
.ForMember(x => x.Example, c => c.MapFrom(x => x.Example))
.ForMember(x => x.BCollection, c => c.MapFrom(x => new [] { new B { MyProperty = x.MyProperty } }));

查看Java demo

详细信息

带有String s="[[Identity (philosophy)|unique identity]]"; Matcher m = Pattern.compile("\\[{2}(.*)\\|(.*)]]").matcher(s); if (m.matches()) { System.out.println(m.group(1).replaceAll("\\W+", " ").trim().replace(" ", "_")); // // => Identity_philosphy System.out.println(m.group(2).trim()); // => unique identity } 的{​​{1}}被解析为"\\[{2}(.*)\\|(.*)]]"模式,该模式匹配以matches()开头的字符串,然后匹配并捕获除line以外的任何0个或多个字符将尽可能多的字符分成组1,然后匹配^\[{2}(.*)\|(.*)]]\z,然后匹配并捕获除行中断符之外的任何0个或更多字符,并将尽可能多的字符分成组2,然后匹配[[。参见regex demo

可以从空白处修剪掉第2组中的内容并按原样使用,但是第1组应通过用空格(|替换所有1+个非单词字符块进行预处理,然后修剪结果( ]]),最后用.replaceAll("\\W+", " ").trim())替换所有空格。