我有以下Java代码:
str = str.replaceAll("<.*?>.*?</.*?>|<.*?/>", "");
这会像这样变成一个字符串:
How now <fizz>brown</fizz> cow.
分为:
How now cow.
但是,我希望它只删除<fizz>
和</fizz>
标记,或者只删除独立</fizz
&gt;标签,并留下元素的内容。所以,正则表达式会将上述内容变为:
How now brown cow.
或者,使用更复杂的字符串,转变为:
How <buzz>now <fizz>brown</fizz><yoda/></buzz> cow.
分为:
How now brown cow.
我试过了:
str = str.replaceAll("<.*?></.*?>|<.*?/>", "");
这根本不起作用。有任何想法吗?提前谢谢!
答案 0 :(得分:33)
"How now <fizz>brown</fizz> cow.".replaceAll("<[^>]+>", "")
答案 1 :(得分:6)
你几乎在那里;)
试试这个:
str = str.replaceAll("<.*?>", "")
答案 2 :(得分:3)
虽然还有其他正确答案,但没有人给出任何解释。
你的正则表达式<.*?>.*?</.*?>|<.*?/>
不起作用的原因是因为它会选择任何标签以及其中的所有内容。您可以在debuggex上看到这一点。
您的第二次尝试<.*?></.*?>|<.*?/>
不起作用的原因是它会从标记的开头选择标记后的第一个关闭标记。这有点拗口,但你可以更好地理解in this example上发生了什么。
您需要的正则表达式更简单:<.*?>
。它只是选择每个标签,忽略它是否打开/关闭。 Visualization
答案 3 :(得分:2)
你也可以试试这个:
str = str.replaceAll("<.*?>", "");
请查看以下示例以便更好地理解:
public class StringUtils {
public static void main(String[] args) {
System.out.println(StringUtils.replaceAll("How now <fizz>brown</fizz> cow."));
System.out.println(StringUtils.replaceAll("How <buzz>now <fizz>brown</fizz><yoda/></buzz> cow."));
}
public static String replaceAll(String strInput) {
return strInput.replaceAll("<.*?>", "");
}
}
<强>输出:强>
How now brown cow.
How now brown cow.
答案 4 :(得分:1)
这不是很优雅,但是很容易理解。以下代码删除了开始和结束XML标记,如果它们同时出现在一行中
<url>"www.xml.com"<\url> , <body>"This is xml"<\body>
正则表达式:
to_replace='<\w*>|<\/\w*>',value=""
答案 5 :(得分:0)
如果要解析XML日志文件,以便可以使用正则表达式{java},<[^<]+<
。那么您将获得<name>DEV</name>
。输出类似于name> DEV。您只需要使用REGEX。