我想为这个字符串模式写一个正则表达式:
<Col name="SKU_UPC_NBR">85634546495</Col>
我想获取Col tag之间的值。
我尝试了以下模式:
Pattern TAG_REGEX = Pattern.compile("<Col name='SKU_UPC_NBR'>(.+?)</col>");
Matcher matcher = TAG_REGEX.matcher(str);
以上不匹配我的字符串并返回空。 请帮我解决这个问题。
答案 0 :(得分:2)
您可以尝试:
<Col[^>]*>(.+?)<\/Col>
<Col[^>]*>
将与开头标记匹配。 [^>]*
表示匹配除&gt;之外的任何字符,以便匹配在第一个&gt;处结束遇到。(.+?)
表示在开始和结束标记之间抓取1个或多个字符<\/Col>
这与结束标记答案 1 :(得分:1)
答案 2 :(得分:1)
正则表达式匹配完全您键入的内容。它没有概括,它不理解有时对你' == "
,它与混合情况不匹配。
您指定的数据格式是开放标记,空格,名称属性,等于,双引号,名称attr数据......
您指定的正则表达式格式为开放标记,空格,名称属性,等于,单引号,名称attr数据...
您需要的是
Pattern TAG_REGEX = Pattern.compile("<Col name=\"SKU_UPC_NBR\">(.+?)</Col>");
注意:您可能希望使用(\d+?)
代替(.+?)
,因为\d
会匹配任何数字,因此正则表达式更具体针对您的数据#39;重新匹配,更易于阅读。但是,如果您知道某些Col
个标签不会包含数字
您可能需要参考this neat interactive Regex tutorial进行正则表达式练习。
您也可以参考Java documentation for Regex patterns,这在您需要特殊字符时非常有用。