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 |- 短路原则,先
[A-Z].*匹配Literal[...],就远匹配 - 然后匹配非逗号
- 短路原则,先
-
多次替换:最长→最短
| 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 |

浙公网安备 33010602011771号