Java:使用Regex省略文本

时间:2013-05-20 11:05:02

标签: java regex hide

您好我正在使用Regex来有条理地省略java中的文本。

String pattern= "(#<omit_[a-zA-Z0-9_]+>)(.+?)(<omit_[a-zA-Z0-9_]+>)";

Mary had a #<omit_size>little <omit_size>lamb, his fleece was white as snow.

我的模式在上面的示例中工作正常,可以找到需要隐藏的内容。

当我可能需要隐藏某些可能需要隐藏的内容时,我的问题就出现了。 e.g:

Mary had a #<omit_segment> #<omit_size>little <omit_size>lamb, his <omit_segment> fleece was white as snow.

上述模式受到限制,因为它无法区分可能跟随'#<omit_'的许多字符排列。因此,如果我只希望隐藏位于'#<omit_segment>... <omit_segment>'我的模式之间的内容而不是'#<omit_segment> ...#<omit_size> ',那么将打印出来:

Mary had a little <omit_size>lamb, his <omit_segment> fleece was white as snow.

而不是所需的:

Mary had a fleece was white as snow.

我意识到Regex可能不是这样的事情的答案,但在我撤消很多东西之前,我想我会看到是否可以挽救任何东西。所以..任何想法?

感谢。

2 个答案:

答案 0 :(得分:1)

String pattern= "(#(<omit_[\\w_]+>))(.*[^#])(\\2)";
String pattern= "(#(<omit_[\\w_]+>))(.+)(?<!#)(\\2)";

\\2与第二组匹配,即精确标记<...>。 因此,如果标记名称在嵌套方面有所不同,则可能会起作用。

两个版本都检查结尾部分是否前面没有#。 在第二种情况下具有负面的后观(匹配时长度为0)。

答案 1 :(得分:1)

你很幸运。使用后引用匹配正确的结束omit关键字。

(#<omit_(\\w+)>)(.+)(?<!#)(<omit_\\2>)