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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从字符串中过滤掉特定字符串相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

steamKey15 = (r'wwwww.wwwww.wwwww')
steamKey25 = (r'wwwww.wwwww.wwwww.wwwww.wwwww.')
steamKey17 = (r'wwwwwwwwwwwwwwwsww')

我发现文本使用这个:

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。

答案

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

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仅返回第一个。

另一答案

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

import re
steamKey15 = (r'(?:w{5}.){2}w{5}')
steamKey25 = (r'(?:w{5}.){5}')
steamKey17 = (r'w{15}sww')
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)

以上是关于如何从字符串中过滤掉特定字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 $lte 从 json 中过滤掉字符串值

如何通过C#中的特定片段从句子中提取整个单词?

Python string中删除(过滤)掉emoji表情字符

Python cProfile:如何从分析数据中过滤掉特定的调用?

从字符串中过滤掉 url

使用 bash 脚本从输入字符串中过滤掉 ABC 字符、数字 123 和特殊字符