我正在尝试这样做: 我有这种文本(即文件):
[[dadasd sadasd sdsd ad asddd]] [[dasdsd]] dsdsd [[dsdas]] ... [[dd ssas dd]]
我只想要双方括号之间的句子。我怎样才能用java解决这个问题?
//This one is not working:
String patternStr = "(.*)\\[\\[(.*)\\]\\](.*)";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher("");
// Set the input
matcher.reset("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ");
...
提前致谢
答案 0 :(得分:5)
您需要以下正则表达式:
\[\[(.+?)\]\]
然后转换为Java字符串:
\\[\\[(.+?)\\]\\]
PowerShell测试:
PS Home:\> [regex]::Matches("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ", '\[\[(.+?)\]\]') | ft -auto
Groups Success Captures Index Length Value
------ ------- -------- ----- ------ -----
{[[sdasd]], sdasd} True {[[sdasd]]} 0 9 [[sdasd]]
{[[ddssssssssssss]], ddssssssssssss} True {[[ddssssssssssss]]} 14 18 [[ddssssssssssss]]
{[[dd]], dd} True {[[dd]]} 40 6 [[dd]]
{[[asdsa]], asdsa} True {[[asdsa]]} 55 9 [[asdsa]]
答案 1 :(得分:4)
您的正则表达式只需修改:\[\[(.*?)\]\]
或此一个:\[\[([^\[\]]*)\]\]
因此结果句子在{No 1
结果:
或者使用此正则表达式:(?<=\[\[)[^\[\]]*(?=\]\])
具有前瞻和后瞻。
结果:
答案 2 :(得分:1)
您可以这样做:
Pattern pattern = Pattern.compile("\\[+(.*?)\\]+");
Matcher matcher = pattern.matcher("[[sdasd]] ddd [[ddssssssssssss]] vvvddd [[dd]] asdasda [[asdsa]] ");
while(matcher.find()) {
System.out.println(matcher.group(1));
}
将输出:
sdasd
ddssssssssssss
dd
asdsa