如何从字符串中过滤掉特定字符串

问题描述 投票:0回答:2

Python初学者在这里。对于我正在写的机器人,我对这部分代码感到难过。

我正在使用Praw制作一个reddit机器人来梳理帖子并删除一组特定的字符(蒸汽CD密钥)。

我在这里做了一个测试帖:https://www.reddit.com/r/pythonforengineers/comments/91m4l0/testing_my_reddit_scraping_bot/

这应该具有所有键的格式。

目前,我的机器人能够使用正则表达式找到帖子。我有这些变量:

steamKey15 = (r'\w\w\w\w\w.\w\w\w\w\w.\w\w\w\w\w')
steamKey25 = (r'\w\w\w\w\w.\w\w\w\w\w.\w\w\w\w\w.\w\w\w\w\w.\w\w\w\w\w.')
steamKey17 = (r'\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\s\w\w')

我发现文本使用这个:

subreddit = reddit.subreddit('pythonforengineers')
for submission in subreddit.new(limit=20):

    if submission.id not in steamKeyPostID:        
        if re.search(steamKey15, submission.selftext, re.IGNORECASE):
            searchLogic()
            saveSteamKey()

所以这只是为了表明我应该在过滤函数中使用的东西是steamKey15 / 25/17和submission.selftext的组合。

所以这是我感到困惑的部分。我找不到一个有效的功能,或者正在做我想做的事情。我的目标是从submission.selftext(帖子的正文)中删除所有文本但是键,最终将保存在.txt文件中。

有什么建议可以解决这个问题吗?我查看了re.sub和.translate,但我不明白这些部分是如何组合在一起的。

如果有帮助我正在使用Python 3.7。

python python-3.x web-scraping praw
2个回答
2
投票

你能不能获得正则表达式的结果?

m = re.search(steamKey15, submission.selftext, re.IGNORECASE)
if m:
    print(m.group(0))

另请注意,点.表示正则表达式中的任何字符。如果你只想匹配点,你应该使用\.。你可以写这样的正则表达式:

r'\w{5}[-.]\w{5}[-.]\w{5}' 

.-分隔时,这将与键匹配。

请注意,这也将匹配以键开头或结尾的任何内容,或者中间有一个键 - 这可能会导致您出现问题,因为您的15-key键正则表达式包含在25键中!要解决这个问题,请使用负向前瞻/负面后视:

r'(?<![\w.-])\w{5}[-.]\w{5}[-.]\w{5}(?![\w.-])'

如果在它们之前和之后没有无关的字符,它将只找到键

另一个提示是使用re.findall而不是re.search - 一些帖子在同一篇文章中包含多个蒸汽键! findall将返回所有比赛,而search仅返回第一个。


1
投票

所以有几件事情首先.意味着正则表达式中的任何角色。我想你知道,但只是为了确定。 \w\w\w\w\w也可以用\w{5}替换,其中指定了5个字母数字。我会用re.findall

import re
steamKey15 = (r'(?:\w{5}.){2}\w{5}')
steamKey25 = (r'(?:\w{5}.){5}')
steamKey17 = (r'\w{15}\s\w\w')
subreddit = reddit.subreddit('pythonforengineers')
for submission in subreddit.new(limit=20):
    if submission.id not in steamKeyPostID:
        finds_15 = re.findall(steamKey15, submission.selftext)
        finds_25 = re.findall(steamKey25, submission.selftext)
        finds_17 = re.findall(steamKey17, submission.selftext)
© www.soinside.com 2019 - 2024. All rights reserved.