用户键入一个包含正则表达式的字符串,如下所示:
'I have the string "(.*)"'
或者
'when user enters (\d+) times text "(.*)" truncate spaces'
我需要将每个匹配括号的出现计数为用户类型,因此上面的文本将为第一个文本返回计数 1,为第二个文本返回 2。另一方面,不应该计算没有匹配的括号:
'I am in the middle of writing this ('
另外我想避免计算嵌套括号。由于此代码将在 vim 中的每次击键时在某些情况下执行(它是 UltiSnips 片段的一部分,因此当我创建片段并输入给定占位符时,此计数函数应评估我在每个新字符上键入的内容)它需要快点;)
总结一下要求:
- 计算括号对
- 不要计算没有匹配的括号
- 不计算嵌套括号
- 快速数数;)
根据要求 - 这是我为完成这项工作所做的初步努力: https ://gist.github.com/3142334
它有效,但不幸的是它也计算内括号,所以我需要对其进行更多调整。
这是另一种仅计算外括号的解决方案:
def fb(string, c=0):
left_bracket = string.find("(")
if left_bracket > -1:
string = string[left_bracket + 1:]
right_bracket = string.find(")")
if right_bracket > -1:
if string[:right_bracket].find("(") == -1:
c += 1
string = string[right_bracket + 1:]
return fb(string, c)
else:
return c