![]() |
1
1
一般来说,正则表达式不能正确处理平衡括号,因为这样做需要计算嵌套的深度,嵌套的深度可以任意深,并且正则表达式只能存储有限数量的状态(一般来说)。 也就是说,我假设您所做的更改没有比三个或四个更深的括号嵌套-在这种情况下,这是可能的。以下是如何构建它: 很容易匹配一个完全没有括号的序列:
我们可以使用它创建一个正则表达式,该表达式与括号中的单个非嵌套表达式匹配:
哪个表达式最多包含一级括号?好吧,这只是paren1和非括号字符的混合:
考虑到这一点,我们当然可以将括号中的平衡表达式与最多一个嵌套级别进行匹配:
我们可以用同样的方法扩展到匹配任何不超过两级()的平衡表达式。
等等:
然后,您可以使用它来构造您想要做的替换的匹配项-这是沿着以下几行的内容:
(实际上,您需要对内容进行调整,使expr5表达式与未附加逗号不匹配,但我希望应该清楚地知道如何执行此操作:) 当然,值得编写一个简短的一次性程序来生成所需的R.E.,而不是手动构造它! |
![]() |
Hard_Course · 用另一列中的值替换行的最后一个非NA条目 3 月前 |
|
Alex Howard · 如何用秒开始的值填充数据帧? 10 月前 |
![]() |
user1946932 · 正则表达式:删除连续两个以上的<br>? 10 月前 |
![]() |
Neeraj · 用R中的另一组单词替换该组单词 10 月前 |