1
1
一般来说,正则表达式不能正确处理平衡括号,因为这样做需要计算嵌套的深度,嵌套的深度可以任意深,并且正则表达式只能存储有限数量的状态(一般来说)。 也就是说,我假设您所做的更改没有比三个或四个更深的括号嵌套-在这种情况下,这是可能的。以下是如何构建它: 很容易匹配一个完全没有括号的序列:
我们可以使用它创建一个正则表达式,该表达式与括号中的单个非嵌套表达式匹配:
哪个表达式最多包含一级括号?好吧,这只是paren1和非括号字符的混合:
考虑到这一点,我们当然可以将括号中的平衡表达式与最多一个嵌套级别进行匹配:
我们可以用同样的方法扩展到匹配任何不超过两级()的平衡表达式。
等等:
然后,您可以使用它来构造您想要做的替换的匹配项-这是沿着以下几行的内容:
(实际上,您需要对内容进行调整,使expr5表达式与未附加逗号不匹配,但我希望应该清楚地知道如何执行此操作:) 当然,值得编写一个简短的一次性程序来生成所需的R.E.,而不是手动构造它! |
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Katia · 根据特定规则进行多行匹配 2 年前 |
MHA · Pandas str.extract()以字母结尾的数字 2 年前 |
Slava Vir · 如何查找后面“/”之间的最后一组 2 年前 |