保持文本但消除标签之间的CR LF

| 各位Regexers, 我有一个充满表达式的平面文件,例如:
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
\"SELECT * FROM THIS_QUERY
WHERE IS_SPREAD_OVER == 123
ORDER BY MULTIPLE_LINES
HAVING AND_IS_BETWEEN_QUOTES\"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
我想消除引号和引号之间的CRLF,以便我所有的查询都像这样方便:
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING BUT_IS_BETWEEN_QUOTES
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
请发布解决方案中使用的RegEx风格。我正在使用TextCrawler,它声称是ECMA262(与VBScript / Javascript相同),而我最接近解决方案的是:
(\\r\\n\".*)(.*)\\r\\n(.*\"\\r\\n)
原谅我。 最好的祝福, 山猫开普勒     
已邀请:
如果下一个
\"
在行尾,则可以先删除所有CRLF:
result = subject.replace(/\\r\\n(?=[^\"]*\"$)/mg, \" \");
说明:
\\r\\n    # Match a CRLF
(?=     # if and only if
 [^\"]*  # it is followed by any number of non-quote characters
 \"      # and a quote
 $      # at the end of a line
)       # End of lookahead.
这将您的示例转换为
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
\"SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING AND_IS_BETWEEN_QUOTES\"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
然后,在第二步中,删除引号:
result = subject.replace(/^\"|\"$/mg, \"\");
    
使用Perl,您可以执行以下操作:
s/^\"([^\"]*)\"$/$s = $1; $s =~ s!(?:\\n|\\r)+! !g; $s/meg
    

要回复问题请先登录注册