繁体   English   中英

如何从字符串中过滤出特定的字符串

[英]How to filter out specific strings from a string

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()

因此,这只是表明我应该在filter函数中使用的东西是steamKey15 / 25/17和Submitting.selftext的组合。

所以这是我感到困惑的部分。 我找不到能正常工作或正在执行我想要的功能的函数。 我的目标是从Submit.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}' 

当以分隔时,它将与键匹配. -

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

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

仅在键前后没有多余字符的情况下才会找到键

另一个提示是使用re.findall而不是re.search有些帖子在同一帖子中包含多个Steam键! findall将返回所有匹配项,而search仅返回第一个匹配项。

所以首先要注意几件事. 表示正则表达式中的任何字符。 我想您知道这一点,但可以肯定的是。 \\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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM