dispatchCondition.replaceAll("<enPara((?:.|\n)*?)</enPara>", ""); 这行代码为什么不生效
时间: 2023-07-19 11:25:43 浏览: 37
有可能是正则表达式不正确导致的。该正则表达式的作用是匹配字符串中 `<enPara>` 和 `</enPara>` 之间的内容,并将其替换为空字符串。但是,由于该正则表达式中的 `((?:.|\n)*?)` 可能会出现贪婪匹配,导致匹配到的内容并不是你所期望的。你可以尝试修改正则表达式,使用更为严谨的方式来匹配:
```
dispatchCondition = dispatchCondition.replaceAll("<enPara[^>]*>[^<]*</enPara>", "");
```
该正则表达式的作用是匹配 `<enPara>` 和 `</enPara>` 标签之间的内容,并将其替换为空字符串。其中,`[^>]*` 匹配除了 `>` 以外的任何字符,`[^<]*` 匹配除了 `<` 以外的任何字符。这样,就可以避免贪婪匹配导致的错误。
相关问题
在Java的String类型中除去所有的"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+=-[]}{;:'\\\"\\\\|~`,./<>?"
您可以使用正则表达式来删除Java字符串中的所有非字母数字和特殊字符。以下是一个示例代码:
```java
String str = "Hello!@#$%^&*()_ World123";
String filteredStr = str.replaceAll("[^a-zA-Z0-9]", "");
System.out.println(filteredStr);
```
输出结果为:HelloWorld123
在这个例子中,我们使用了`replaceAll()`方法,并传入了一个正则表达式`[^a-zA-Z0-9]`作为要替换的模式。这个模式表示除了字母和数字以外的所有字符。我们将所有匹配到的字符替换为空字符串,从而删除了所有非字母数字和特殊字符。
请注意,这只是一个简单的示例,如果您有更复杂的需求,需要根据具体情况调整正则表达式。
将 "<?xml version=\"1.0\" encoding=\"utf-8\"?><S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body><ns2:queryPatientResponse xmlns:ns2=\"http://impl.service.scjydz.com/\"><return><?xml version="1.0" encoding="UTF-8"?>\n" + "<DATA><TYPE_CODE>AE</TYPE_CODE><RESULT>xml格式错误</RESULT><RESID></RESID><HIS_RESID></HIS_RESID><CREATIONTIME>2023-05-30 15:40:54</CREATIONTIME></DATA></return></ns2:queryPatientResponse></S:Body></S:Envelope>"; 转为中文
这段字符串中已经包含了中文字符,无需进行转换。但是需要注意的是,该字符串中包含了XML的格式信息,需要将其去除后才能正常解析XML。以下是一个示例代码,将该字符串解析为XML,并输出中文结果:
```
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class XmlToString {
public static void main(String[] args) {
String xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?><S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body><ns2:queryPatientResponse xmlns:ns2=\"http://impl.service.scjydz.com/\"><return><?xml version="1.0" encoding="UTF-8"?>\n" +
"<DATA><TYPE_CODE>AE</TYPE_CODE><RESULT>xml格式错误</RESULT><RESID></RESID><HIS_RESID></HIS_RESID><CREATIONTIME>2023-05-30 15:40:54</CREATIONTIME></DATA></return></ns2:queryPatientResponse></S:Body></S:Envelope>";
String xmlContent = xmlString.replaceAll("<\\?xml[^>]+\\?>", ""); // 去除XML头部信息
Document document = null;
try {
document = DocumentHelper.parseText(xmlContent); // 解析XML
} catch (DocumentException e) {
e.printStackTrace();
}
if (document != null) {
Element root = document.getRootElement();
Element body = root.element("Body");
Element queryPatientResponse = body.element("queryPatientResponse");
Element returnElement = queryPatientResponse.element("return");
String result = returnElement.getStringValue();
System.out.println(result); // 输出中文结果
}
}
}
```
在上面的代码中,我们首先使用正则表达式去除XML头部信息,然后使用dom4j库解析XML,并获取中文结果。注意,该字符串中的中文字符可能经过了编码,需要进行解码后才能正确输出。
相关推荐
Filter filter = new Filter() { @Override public void init(javax.servlet.FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); // 重置缓冲区,响应头不会被重置 response.resetBuffer(); // 获取common.js String text = Utils.readFromResource(filePath); // 正则替换banner, 除去底部的广告信息 text = text.replaceAll("<a.*?banner\">
", ""); text = text.replaceAll("powered.*?shrek.wang", ""); response.getWriter().write(text); } @Override public void destroy() { } }; 这段代码中为什么destroy方法体是空的