【发布时间】:2016-02-23 18:43:08
【问题描述】:
(希望)这里有简单的正则表达式问题。我正在寻找匹配 1 个或多个换行符,这些换行符后面不是由三个大写字符和一个管道 (|) 组成的特定模式,并删除它们。
举个例子,我想转这个:
foo bar foo bar.
Normal
0
false
false
false
EN-US
JA
X-NONE
foo bar foo bar
|||||HH
OBX|156|TX|foo bar|||N
OBX|157|TX|foo bar
进入这个:
foo bar foo bar. Normal 0 false false false EN-US JA X-NONE|||||HH
OBX|156|TX|foo bar|||N
OBX|157|TX|foo bar
我有一个在 Sublime 中非常有用的正则表达式:
(\n+)(?!MSH|PID|NTE|PV1|RXO|ORC|DG1|OBR|OBX).*
但在 ruby 中,它并没有摆脱换行符。将崇高的正则表达式转换为 Rails 的正则表达式时,我有什么遗漏吗?
@r.force_encoding("UTF-8").gsub("\r\n","\r").gsub("(\r+)(?!MSH|PID|NTE|PV1|RXO|ORC|DG1|OBR|OBX)(.*)"," $2")
【问题讨论】:
-
您是否尝试过将正则表达式表示为正则表达式而不是字符串?即:
gsub(/(\r+).../)而不是gsub("(\r+)...") -
你可以像这样简化正则表达式:
\n+(?!([A-Z]{3}).*). -
我不明白为什么你想要的输出的第一行不是
foo bar foo bar.Normal0falsefalsefalseEN-USJAX-NONEfoo bar foo bar|||||HH。也就是说,为什么换行符组转换为空格(以及为什么有时有一个空格,有时有两个空格)以及第二个"foo bar foo bar"发生了什么? -
@Cary Swoveland,我在做这个例子时有点匆忙,基本上我只是想将一个或多个换行符的组转换为一个空格。 @archana 和 @tadman 使用
//而不是字符串。 -
您应该编辑以更正所需的输出,因为您的问题虽然得到了回答,但将来可能会被许多人阅读。
标签: ruby-on-rails ruby regex sublimetext