删除评论中的所有内容,但某些字符串

时间:2017-12-14 15:46:30

标签: python bots strip reddit praw

所以我为Reddit制作了一个机器人,用于侦听一个特定的字符串,该字符串将机器人调用。好吧,调用该字符串,“!callme”。使用此机器人时,必须在调用字符串后面提供一个数字,例如“!callme 1234”。

目前,我已将机器人设置为删除“!callme”和字符串中的空格,如果之后还有其他内容,则会发布“失败”注释并告诉用户再次尝试。我想要做的是让它从“!callme”字符串之后的注释 EXCEPT 数字字符串中删除字面上的所有内容。我需要这个,因为它在数学运算中使用数字,如果最终值不是数字,它就会失败并告诉用户他们做错了。

例如:“!callme 12345”会起作用并发布正确的评论,但“!callme helloworld”会失败并发布评论,告诉他们格式正确。

我想跳过那一步并删除除“!callme”字符串后的数字字符串。基本上,如果用户在调用机器人之前写了一个句子,它就会失败。我想改变它。

我现在的代码在下面是当前的工作条。

g = comment.body
        pattern = re.compile(r'\s+')
        g = re.sub(pattern, '', g)
        g = g.replace('!callme', '')
        if g.isdigit():
            g = int(g)
        else:
            bad comment here
            data_entry(com_id, com_auth, 1)
            print("Bad comment found! Posting reply to comment " + comment.id + "!")
        if isinstance(g, int):
            cp = float(g / 100)
            pa = float(cp / 10)
            good comment here

评论中还有一些其他try语句,但这并不重要。

我怎么能这样做?此外,如果此处的代码不是最佳,请随时纠正我。

2 个答案:

答案 0 :(得分:0)

如果我正确地提出了你的问题,这样的话会适合吗?

g = "!callme XXX"
pat = re.compile(r'[0-9]+')
num = re.findall(pat, g) # num = []
g = "!callme 1234"
num = re.findall(pat, g) # num = '1234', now you could int(num)

或者您可以使用更精确的正则表达式,例如

g = "!callme   1234" 
pat = re.compile(r'(\!callme[ ]*)([0-9]+)')
m = re.search(pat, g)
# and go directly to group 2 which should be the num
print m.group(2) # this prints 1234, then int(m.group(2))

这里我定义了两个组,一个用于callme部分,另一个用于数字部分

答案 1 :(得分:0)

这应与您想要的数字相匹配。

public class A{
   long variable = 0;
   static object sync = new object();
   void Increment(){
       lock (sync){variable++;}
   }
}

模式说明:pattern = re.compile(".*!callme +(\d+).*") result = re.findall(pattern, g) if result: g = int(result[0])
.*!callme +(\d+).*之前.*匹配任何内容 !callme之后+匹配至少一个空格 !callme匹配至少一位数字
(\d+)匹配

之后的任何字符