我刚开始使用正则表达式,并且正在尝试使用它来解析HTML表格中的一些数据。我试图抓取<tr >
和</tr>
标记之间的所有内容,然后再次生成类似的正则表达式以创建JSON数组。
我尝试使用它,但它只匹配第一组,而不是所有其他组。
<tr >(.*?)</tr>
如何找到这些标签之间的所有匹配项?
答案 0 :(得分:1)
虽然使用正则表达式来完成这项工作是一个坏主意(有很多方法可以解决问题),但你的模式基本上是正确的。
使用Python返回所有匹配
然后问题就是在Python中返回所有匹配或捕获组。有两种基本方法:
使用finditer
for match in regex.finditer(subject):
print("The Overall Match: ", match.group(0))
print("Group 1: ", match.group(1))
使用findall
findall
有点奇怪。当您拥有捕获组时,要访问捕获组和整体匹配,您必须将原始正则表达式包装在括号中(以便捕获整体匹配)。在您的情况下,如果您希望能够访问标记的外部和内部(使用第1组捕获),则正则表达式将变为:(<tr >(.*?)</tr>)
。然后你做:
matches = regex.findall(subject)
if len(matches)>0:
for match in matches:
print ("The Overall Match: ",match[0])
print ("Group 1: ",match[1])
答案 1 :(得分:0)
它对我有用,也许你需要使用findall
,或者你可能没有使用原始字符串?
import re
txt = '''<tr >foo</tr><tr >bar
</tr>
<tr >baz</tr>'''
# Be sure to use the DOTALL flag so the newlines are matched by the dot as well.
re.findall(r'<tr >(.*?)</tr>', txt, re.DOTALL)
返回
['foo', 'bar\n\n', 'baz']