RegEx从Java中的C样式注释中提取文本

时间:2017-05-31 21:43:43

标签: java regex

作为正则表达式的初学者,我试图使用它们从Java源文件中的C-Style和JavaDoc Comments中提取文本。这是一次令人沮丧的经历,我的所有尝试都取得了部分成功。我一直在使用模式"\\n\\p{Blank}++\\x{2A}"来识别并替换行\n末尾的文本到下一行的*。但这并不能处理标记新段落的*\n

我认为单独选择和提取文本可能是更好的解决方案。有人可以帮忙吗?

我想要的结果是单独的文字,前面的/*/**,后面的*/以及每行开头的空格和*已删除。如果评论是:

/* Quisque congue nibh diam, quis gravida ligula pharetra ut.
 * Duis maximus risus turpis, convallis hendrerit sapien
 * malesuada non. Integer ornare augue lorem, eu placerat
 * velit pharetra quis. Maecenas varius elit ac nulla
 * porttitor, id cursus mauris varius. Suspendisse potenti.
 * In tempus faucibus nulla posuere aliquam. Sed efficitur
 * lorem est, ac ullamcorper nibh blandit eget.
 *
 * Mauris et interdum enim. Duis ac malesuada ante. Sed ut
 * ipsum ut odio aliquet accumsan nec vitae risus. Quisque
 * lacinia elit risus, faucibus dapibus neque euismod id.
 * Sed eu leo cursus, porttitor justo eget, tincidunt augue.
 * Donec sit amet ex non arcu auctor semper id non lorem.
 * Nullam ac augue in ipsum iaculis faucibus cursus eget nisi.
 * Sed risus tortor, cursus vel blandit in, tempus ut tortor.
 * Etiam lobortis tristique sem vitae finibus. Duis sit amet
 * turpis lorem. Morbi dictum libero et porta consectetur.
 */

我想要的结果是:

“Quisque congue nibh diam,quis gravida ligula pharetra ut.Duis maximus risus turpis,convallis hendrerit sapien malesuada non.Integer ornare augue lorem,eu placerat velit pharetra quis.Maecenas varius elit ac nulla porttitor,id cursus mauris varius.Hospendisse在tempus faucibus nulla posuere aliquam中,sed efficitur lorem est,ac ullamcorper nibh blandit eget。

Mauris et interdum enim。 Duis ac malesuada ante。 Sed ut ipsum ut odio aliquet accumsan nec vitae risus。 Quisque lacinia elit risus,faucibus dapibus neque euismod id。 Sed eu leo cursus,porttitor justo eget,tincidunt augue。 Donec坐在非arcu auctor semper id non lorem。 Nullam ac augue in ipsum iaculis faucibus cursus eget nisi。 Sed risus tortor,cursus vel blandit in,tempus ut tortor。 Etiam lobortis tristique sem vitae finibus。杜伊斯坐在一个土耳其lorem。 Morbi dictum libero et porta consectetur。“

虽然没有本网站编辑强加的格式化(换行符)。

1 个答案:

答案 0 :(得分:0)

Pattern p = Pattern.compile("^(/?[\\*]{0,2})([^/\\*\\n]{0,})", Pattern.MULTILINE);
Matcher m = p.matcher(CommentString);
boolean found = false;
while(m.find())
{
    Matcher m2 = Pattern.compile("\\s+").matcher(m.group(2));
    if(m2.matches() || m.group(2).equals(""))
    {
        System.out.println("");
    }
    else
    {
        System.out.print(m.group(2).trim() + " ");
    }
    found = true;
}
if(!found)
{
    System.out.println("NOT");
}

假设评论中没有任何星号[*]或斜杠[/]。

^(/?[\\*]{0,2}) - 检查正在阅读的行是以/*/**还是*

开头的

([^/\\*\\n]{0,}) - 这是捕获评论正文的组(任何不是*/\n