如何从字符串中过滤掉特定字符串
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)
以上是关于如何从字符串中过滤掉特定字符串的主要内容,如果未能解决你的问题,请参考以下文章
Python string中删除(过滤)掉emoji表情字符