我正在尝试创建一个匹配字符串的正则表达式,如果它在一行中有3个或更多重复字符(例如aaaaaa,testtttttt,otttttter)。
我尝试了以下内容:
this.subWorkerA.work((TaskA)task)
连续匹配任意 3个字符,但不匹配连续字符......我哪里出错?
答案 0 :(得分:6)
使用 true 正则表达式无法完成您所要求的内容,您需要的是(不规则的)反向引用。虽然许多正则表达式引擎实现它们,但Go使用的RE2却没有。 RE2是一个快速的regexp引擎,可以保证线性时间字符串处理,但是没有已知的方法来实现具有这种效率的反向引用。 (有关详细信息,请参阅https://swtch.com/~rsc/regexp/。)
要解决您的问题,您可能需要搜索其他一些正则表达式库。我相信可以找到PCRE的绑定,但我没有他们的个人经验。
另一种方法是手动解析字符串而不使用(ir)正则表达式。
答案 1 :(得分:1)
这是一个丑陋的解决方案,您可以自动生成它:
from tkinter import *
from tkinter import ttk
after_id = None
def clockwise_move(e):
global after_id, c, n
n += 1
canvas.coords(square1, *c[n % len(c)])
canvas.coords(square2, *c[(n + 1) % len(c)])
canvas.coords(square3, *c[(n + 2) % len(c)])
canvas.coords(square4, *c[(n + 3) % len(c)])
after_id = e.widget.after(1000, clockwise_move, e)
def stop(e):
e.widget.after_cancel(after_id)
main = Tk()
frame = ttk.Frame(main)
button_frame = ttk.Frame(frame)
canvas = Canvas(frame, width=500, height=500)
c = [(0, 0, 250, 250),
(250, 0, 500, 250),
(250, 250, 500, 500),
(0, 250, 250, 500)]
n = len(c)
square1 = canvas.create_rectangle(*c[n % len(c)], fill="red")
square2 = canvas.create_rectangle(*c[(n + 1) % len(c)], fill="yellow")
square3 = canvas.create_rectangle(*c[(n + 2) % len(c)], fill="blue")
square4 = canvas.create_rectangle(*c[(n + 3) % len(c)], fill="green")
clockwise = ttk.Button(button_frame, text="Clockwise")
clockwise.grid(column=2, row=3)
clockwise.bind("<Button-1>", clockwise_move)
clockwise.bind("<Leave>", stop)
frame.pack()
canvas.grid(column=1, row=1)
button_frame.grid(column=2, row=1)
for child in button_frame.winfo_children():
child.grid_configure(padx=10, pady=20)
main.mainloop()
答案 2 :(得分:1)
由于存在问题,我最终确定了以下非正则表达式解决方案:
norm = "this it a ttttt"
repeatCount := 1
thresh := 3
lastChar := ""
for _, r := range norm {
c := string(r)
if c == lastChar {
repeatCount++
if repeatCount == thresh {
break
}
} else {
repeatCount = 1
}
lastChar = c
}