我在构造正则表达式时遇到问题

I have a problem with construct regular expression

我有一个数据框,其中一列中的行如下所示:

<title>Some text</title>

<selftext>Some text</selftext>

以上为一行一列。 问题是不是每一行都像这样。我必须实施看起来不像这样的行已被删除。

我尝试使用下面的代码:

pattern = "<title>[a-zA-Z0-9]</title>\n\n<selftext>[a-zA-Z0-9]</selftext>"
for row in df.column_name:
    if row == pattern:
        print(row)

我没有打印任何行,尽管我应该打印。

我对模式错误的第一个想法是您设置了一个范围,但只允许恰好一个字符。使用此选项允许标题和自文本标签中的任何内容 至少 一个字符。

pattern = "<title>[a-zA-Z0-9]+</title>\n\n<selftext>[a-zA-Z0-9]+</selftext>"

此外,您没有调用实际的正则表达式模式。您刚刚进行了字符串比较。因此,除非内容完全是 [a-zA-Z0-9],否则它不会匹配。

这样使用:

import re
pattern = "<title>[a-zA-Z0-9]+</title>\n\n<selftext>[a-zA-Z0-9]+</selftext>"
for row in df.column_name:
    if re.match(pattern, row):
        print(row)

编辑:除非您还想通过完全遵循正确的字符集和数字范围来过滤内容,否则我建议使模式更加广泛。基本上 XML 允许标签内除标签 (<>) 之外的所有内容。所以你可以一直匹配到下一个开始标签。当你这样做时,你也可以允许空标签,因为这些也可以出现在 XML.

import re
pattern = "<title>[^<]*</title>\n\n<selftext>[^<]*</selftext>"
for row in df.column_name:
    if re.match(pattern, row):
        print(row)