【发布时间】:2015-07-02 17:04:47
【问题描述】:
我一直在梳理与正则表达式相关的网站和教程,以弄清楚如何实现这一点,但遗憾的是仍然无法清楚地掌握正则表达式。我有已标记化的论坛帖子,并试图根据可能包含年龄相关信息的帖子过滤它们。
比如我用这个sn-p来尝试过滤:
re.search(r'.*(daughter|ds|son|dd|) (is|was|is turning|turned) ([0-9]{2})*', post)
这适用于字符串等文本
'my son was 7 when this incident occurred'
而且在字符串上
'is'
过滤,
r = re.compile('.*(daughter|ds|son|dd|)(is|was|is turning|turned)([0-9]{2}).*')
filter(r.match, ['my daughter is 7', 'is'])
但是当应该与第一个字符串匹配时,这会返回一个空列表。
代码 sn-p 有什么问题,有哪些指针可以帮助我过滤正则表达式匹配?
【问题讨论】:
-
如果输入字符串正好是
is,你的正则表达式将如何匹配is? regex101.com/r/oY2sI2/3 -
我不认为它匹配
"is"事实上它绝对不匹配(至少在 python 中) -
所以你想从字符串中提取年龄还是什么?
-
我更新了我的帖子以反映我过去过滤的内容。现在,我只想过滤所有包含该表达式的帖子。
-
您已经发布了两个表达式。要修复第一个问题,请在最后的
*之前添加一个.。要修复第二个,请添加如下空格:'.*(daughter|ds|son|dd|) (is|was|is turning|turned) ([0-9]{2}).*'。此外,如果您不想被限制在两位数的年龄,您可以选择更现实的[0-9]{1,3}。