示例字符串:Before text, <ref>{{BLAHBLAHBLAHBLAH}}</ref> after text, <ref>{{reference2}}</ref> end of paragraph.
我希望删除对<ref>
和</ref>
及其中所有内容的任何提及。
我想从上面的示例字符串中得到的结果:Before text, after text, end of paragraph.
我已阅读regex remove everything between 2 strings并已尝试replaceAll("<ref>.*</ref>", "")
,我遇到的问题是该线程中的方法删除过多。如果我在上面的文本中使用此方法,结果将是:Before text, end of paragraph
。它将删除<ref>
个标记集之间的文本。
是否有一种简单的正则表达方式来实现所需的结果?在我的实际文本中,可能会有许多(超过2组)<ref>
</ref>
个标记,其中包含有用的文本。
编辑:添加了我试过的正则表达式。
答案 0 :(得分:3)
我假设您使用replaceAll("<ref>.*</ref>", "");
进行了尝试。尝试使用问号,这使得明星不贪心。 replaceAll("<ref>.*?</ref>", "");
答案 1 :(得分:1)
如果您在引用的问题中找不到答案,那么您确实“删除了太多”,因为答案使用贪婪的运算符,请使用*?
进行non-greedy匹配...
如果你必须使用一个正则表达式,我会提出以下正则表达式:
str = str.replaceAll("(?s)<ref>.*?</ref>", "");
注意:内联(?s)
模式修饰符允许点在换行符序列中匹配。