regex 经验匹配式

Union[a,b] → a|b

用这个: https://ast-grep.github.io/catalog/python/recursive-rewrite-type.html
vscode 有 ast-grep的配套拓展,但容易导致 语言服务器 反应缓慢,不如手动命令ast-grep scan -i

正则

Union[Literal['a', 'b', 'c'], aio.Task, TYPE_DIY, int, None]

思路:

  • 子式: ([A-Z]+[^,]*?\[.*\]|[^,]+) + , $1 |

    1. 短路原则,先[A-Z].*匹配Literal[...],就远匹配
    2. 然后匹配非逗号
  • 多次替换:最长→最短

From To
Union[a,b,c,d] Union\[子式, 子式, 子式, 子式\] $1 | $2 | $3 | $4
Union[a,b,c] Union\[子式, 子式, 子式\] $1 | $2 | $3
Union[a,b] Union\[([A-Z]+[^,]*?\[.*?\]|[^,]+), ([A-Z]+[^,]*?\[.*?\]|[^,]+)\] $1 | $2
posted @ 2025-04-16 09:53  Nolca  阅读(12)  评论(0)    收藏  举报