python - 使用正则表达式查找两个字符串之间的所有匹配项

标签 python regex

我刚刚开始第一次使用正则表达式,并尝试使用它来解析 HTML 表中的一些数据。我试图捕获 <tr > 之间的所有内容和</tr>标签,然后再次制作类似的正则表达式来创建 JSON 数组。

我尝试使用它,但它仅与第一组匹配,而不与其余所有组匹配。

<tr >(.*?)</tr>

如何找到这些标签之间的所有匹配项?

最佳答案

虽然使用正则表达式来完成这项工作是一个坏主意(有很多方法会出错),但您的模式基本上是正确的。

使用 Python 返回所有匹配

接下来的问题就变成了如何在 Python 中返回所有匹配项或捕获组。有两种基本方法:

  1. 查找器
  2. 查找全部

使用 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])

关于python - 使用正则表达式查找两个字符串之间的所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299068/

相关文章:

python - 如何将 DataFrame 从长格式转换为宽格式,按计数聚合列的值

python - 列出表中存在的字段

C# 如何通过社会安全号码查找某人出生的州

python - SVM sklearn 上的随机种子产生不同的结果

python - 基于另一个查询集过滤一个查询集

python - 如何计算 pandas 数据框中列中 True 和 False block 的数量

MySQL:从列中的字符串中选择单词

c# - 为什么 C# 编译的正则表达式比等效的字符串方法更快?

python - 查找并替换引号之间的字符串

c++ - std::regex 等效于 '/g' 全局修饰符