小编use*_*458的帖子

多个匹配分隔符

这是我的正则表达式:

([+-]*)(\\d+)\\s*([a-zA-Z]+)
Run Code Online (Sandbox Code Playgroud)
  • 第1组=签名
  • 第2组=乘数
  • 第3组=时间单位

问题是,我想匹配给定的输入,但它可以"链接".因此,当且仅当整个模式在这些事件之间没有任何重复时(空白除外),我的输入应该是有效的.(只有一个匹配或多个匹配彼此相邻,它们之间可能有空格).

有效的例子:

1day
+1day
-1 day
+1day-1month
+1day +1month
   +1day  +1month    
Run Code Online (Sandbox Code Playgroud)

无效的例子:

###+1day+1month
+1day###+1month
+1day+1month###
###+1day+1month###
###+1day+1month###
Run Code Online (Sandbox Code Playgroud)

我的情况下,我可以使用matcher.find()方法,这将做的伎俩,但它将接受这样的输入:+1day###+1month这对我无效.

有任何想法吗?这可以通过多个IF条件和多个检查开始和结束索引来解决,但我正在寻找优雅的解决方案.

编辑

下面的评论中建议的正则表达式^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$将部分地解决这个问题,但如果我在下面的代码中使用它,它会返回与我正在寻找的结果不同的结果.问题是我不能使用,(*my regex*)+因为它会匹配整个事情.

该解决方案是与整个输入相匹配^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$,然后使用([+-]*)(\\d+)\\s*([a-zA-Z]+)matcher.find()matcher.group(i)提取每场比赛和他的团体.但我一直在寻找更优雅的解决方案.

java regex

10
推荐指数
1
解决办法
140
查看次数

如何在Python中关闭线程?

我有一些问题,太多线程尚未完成.我认为队列命令.join()只是关闭队列而不是使用它的线程.

在我的脚本中,我需要检查280k域,并为每个域获取他的MX记录列表,并获得服务器的IPv6地址(如果有).

我使用了线程,并感谢他们脚本的速度快了很多倍.但是有一个问题,虽然有加入()队列,活着的线程数量在不断增长,直到错误发生的通知着创建任何新的线程(OS的限制吗?).

当我从数据库中检索新域时,如何在每个For循环后终止/关闭/停止/重置线程?

线程类定义......

class MX_getAAAA_thread(threading.Thread):
    def __init__(self,queue,id_domain):
        threading.Thread.__init__(self)
        self.queue = queue
        self.id_domain = id_domain


    def run(self):
        while True:
            self.mx = self.queue.get()

            res = dns.resolver.Resolver()
            res.lifetime = 1.5
            res.timeout = 0.5

            try:
                answers = res.query(self.mx,'AAAA')
                ip_mx = str(answers[0])
            except:
                ip_mx = "N/A"

            lock.acquire()

            sql = "INSERT INTO mx (id_domain,mx,ip_mx) VALUES (" + str(id_domain) + ",'" + str(self.mx) + "','" + str(ip_mx) + "')"
            try:
                cursor.execute(sql)
                db.commit()
            except:
                db.rollback()

            print "MX" , '>>' , ip_mx, ' :: ', str(self.mx)

            lock.release() …
Run Code Online (Sandbox Code Playgroud)

python queue multithreading join

3
推荐指数
1
解决办法
1万
查看次数

Java等于加运算符

我需要解释这个奇怪的运算符=+(等于加)

示例#1:

Double a = new Double(5);
Double b = new Double(10);
a += b
Run Code Online (Sandbox Code Playgroud)

结果:

a=15.0
b=10.0
Run Code Online (Sandbox Code Playgroud)

示例#2:

Double a = new Double(5);
Double b = new Double(10);
a =+ b
Run Code Online (Sandbox Code Playgroud)

结果:

a=10.0
b=10.0
Run Code Online (Sandbox Code Playgroud)

我理解第一个例子,但请解释一下这个=+运算符在例子 2 中做了什么。

另一个有趣的事实是,这些运算符是有效且可编译的:+=、-=、*=、/=
但是这两个中的任何一个都不会编译:=*、=/

java operators equals-operator

3
推荐指数
1
解决办法
7200
查看次数

标签 统计

java ×2

equals-operator ×1

join ×1

multithreading ×1

operators ×1

python ×1

queue ×1

regex ×1