我有一个字符串
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())
{
....
}
但模式不匹配..
请帮助
由于
答案 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()
)替换所有空格。