ユーザーは、次のような正規表現を含む文字列を入力します。
'I have the string "(.*)"'
また
'when user enters (\d+) times text "(.*)" truncate spaces'
一致する各ブラケットの出現をユーザー タイプとしてカウントする必要があるため、上記のテキストは最初のテキストに対してカウント 1 を返し、2 番目のテキストに対してカウント 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