需要正则表达式帮助
我试图将两个或更多个(如同一个)标签的出现和两个
更换用以下模式替换
Pattern brTagPattern = Pattern.compile("(\\s*){2,}", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
但是在某些情况下,’
‘标签带有空格,并且它们被4个标签取代,实际上应该用2个标签代替。
我该怎么做才能忽略标签之间的2或3(几个)空格?
可能不是您想要听到的答案,但一般的智慧是您不应该尝试使用正则表达式解析XML / HTML。 很多事情都可能出错 – 使用专门用于此类数据的解析库是一个更好的主意,这也将完全绕过您遇到的问题。
如果您确定您的HTML是格式良好的XML,或者如果HTML可能很混乱(如大多数真实HTML),那么您应该尝试像TagSoup这样的东西,看看JAXB 。
这是一些用于测试模式的Groovy代码:
import java.util.regex.* Pattern brTagPattern = Pattern.compile( "(<\\s*br\\s*/\\s*>\\s*){2,}", Pattern.CASE_INSENSITIVE | Pattern.DOTALL ) def testData = [ ['', ''], ['
', '
'], ['< br/>
', '
'], ['
', '
'], ['
< br/ >
', '
'], ['
', '
'], ['
', '
'], ['
w
','
w
'], ] testData.each { inputStr, expected -> Matcher matcher = brTagPattern.matcher( inputStr ) assert expected == matcher.replaceAll( '
' ) }
一切似乎都过得很好……
你可以改变你的正则表达式:
Pattern brTagPattern = Pattern.compile("<\\s*br\\s*/\\s*>\\s*<\\s*br\\s*/\\s*>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
这将忽略两者之间的每个空格
。 如果你只想要2或3,你可以使用:
Pattern brTagPattern = Pattern.compile("<\\s*br\\s*/\\s*>(\\s){2,3}<\\s*br\\s*/\\s*>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);