python 非贪婪正则表达式搜索太多数据
python Non greedy regular expression searching too many data
字符串:'<td attr="0">str1</td><td attr="5">str2</td><td attr="7">str2</td><td attr="9">str4</td>'
我只想搜索 第一个 "td" 标签,其中包含文本:"str2"。所以我尝试了两种不同的非贪婪表达式,如下所示:
>>> mystring = '<td attr="0">str1</td><td attr="5">str2</td><td attr="7">str2</td><td attr="9">str4</td>'
>>> print re.search("(<td.*?str2.*?</td>)",mystring).group(1)
<td attr="0">str1</td><td attr="5">str2</td>
>>> print re.search(".*(<td.*?str2.*?</td>).*",mystring).group(1)
<td attr="7">str2</td>
这里我期望输出为 "<td attr="5">str2</td>"
,因为我在正则表达式中使用了非贪婪表达式。这里有什么问题以及如何获取预期的搜索结果?
注意:我无法使用 html 解析器,因为我的实际数据集的格式不适合 xml 解析
使用[^>]
代替.
:
>>> print re.search("(<td[^>]*?>str2.*?</td>)",mystring).group(1)
<td attr="5">str2</td>
(see demo)
或者,更好,使用HTMLParser。
编辑:此正则表达式甚至匹配子标签:
(<td[^<]*?(?:<(?!td)[^<]*?)*str2.*?</td>)
字符串:'<td attr="0">str1</td><td attr="5">str2</td><td attr="7">str2</td><td attr="9">str4</td>'
我只想搜索 第一个 "td" 标签,其中包含文本:"str2"。所以我尝试了两种不同的非贪婪表达式,如下所示:
>>> mystring = '<td attr="0">str1</td><td attr="5">str2</td><td attr="7">str2</td><td attr="9">str4</td>'
>>> print re.search("(<td.*?str2.*?</td>)",mystring).group(1)
<td attr="0">str1</td><td attr="5">str2</td>
>>> print re.search(".*(<td.*?str2.*?</td>).*",mystring).group(1)
<td attr="7">str2</td>
这里我期望输出为 "<td attr="5">str2</td>"
,因为我在正则表达式中使用了非贪婪表达式。这里有什么问题以及如何获取预期的搜索结果?
注意:我无法使用 html 解析器,因为我的实际数据集的格式不适合 xml 解析
使用[^>]
代替.
:
>>> print re.search("(<td[^>]*?>str2.*?</td>)",mystring).group(1)
<td attr="5">str2</td>
(see demo)
或者,更好,使用HTMLParser。
编辑:此正则表达式甚至匹配子标签:
(<td[^<]*?(?:<(?!td)[^<]*?)*str2.*?</td>)