rascal - 删除空行的正则表达式会产生错误的结果
问题描述
有人可以帮我解决我在使用正则表达式时遇到的问题吗?我有一个包含以下代码的文件:
我正在使用访问来查找匹配项并替换它们,以便我可以删除空行。然而,结果并不是我所期待的。代码如下:
str content = readFile(location);
// Remove empty lines
content = visit (content) {
case /^[ \t\f\v]*?$(?:\r?\n)*/sm => ""
}
有人可以解释我在正则表达式以及下面显示的那个方面做错了什么吗?我似乎无法弄清楚为什么它不起作用。
str content = readFile(location);
// Remove empty lines
content = visit (content) {
case /^\s+^/m => ""
}
亲切的问候,
鲍勃
解决方案
我认为这里的大问题是,在 的上下文中visit
,^
锚并不意味着你认为它的作用。看这个例子:
rascal>visit ("aaa") { case /^a/ : println("yes!"); }
yes!
yes!
yes!
- visit 匹配字符串的每个后缀处的正则表达式,因此 ^ 对于每个后缀都是相对的。
- 首先它从“aaa”开始,然后是“aa”,然后是“a”。
在您的示例访问中,将发生的情况是行的空后缀也将匹配您的正则表达式,并用空字符串替换它们。我认为另一个效果是回车没有被急切地吃掉。
要解决此问题,只需不使用访问,而是使用for
循环或while
,以:=
匹配作为条件。
推荐阅读
- javascript - 数组中的初始化程序,但我想用变量控制数组中的每个对象
- ssl - C# SDK - ASP.NET Core 2.1 - 无法建立 SSL 连接
- python - 在 Exchange 中设置 is_read 而不读取整个对象
- python - 已定义函数中未解析的引用
- excel - 是否有以下解决方案:我的 vbscript 出现错误:“Microsoft Excel:范围类的自动过滤方法失败”
- swift - 在锁定屏幕上使用 PushKit 和 CallKit 在后台启动应用程序时连接到 WebRTC 后没有声音
- reactjs - 在 ReactJS 中设置状态时如何渲染子组件或并行组件?
- sql - 描述适用于一个表但不适用于其他表的命令
- android - 透明的 AppBarLayout
- oracle - 如何解决 FRM 41003 :- 打开表单时无法在此处执行此功能?