所以我为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
语句,但这并不重要。
我怎么能这样做?此外,如果此处的代码不是最佳,请随时纠正我。
答案 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+)
匹配