我对构造正则表达式有问题



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

<title>Some text</title>
<selftext>Some text</selftext>

上面是一列中的一行。问题是不是每一行都是这样。我必须实现那些看起来不像这样的行被删除了。

我尝试使用以下代码:

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

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

我对模式错误的第一个想法是设置一个范围,但只允许正好一个字符。使用此选项可以允许标题和self-text标记中的任何内容至少包含一个字符。

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

此外,您没有调用实际的regex模式。你刚刚做了一个字符串比较。因此,除非内容完全是[a-zA-Z0-9],否则它将不匹配。

这样使用:

import re
pattern = "<title>[a-zA-Z0-9]+</title>nn<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>nn<selftext>[^<]*</selftext>"
for row in df.column_name:
if re.match(pattern, row):
print(row)

最新更新