首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >维护文本,但消除标记之间的CR

维护文本,但消除标记之间的CR
EN

Stack Overflow用户
提问于 2011-05-18 14:50:37
回答 2查看 863关注 0票数 0

雷吉斯兄弟,

我有一个平面文件,里面满是表达式,比如:

代码语言:javascript
复制
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,这样我的所有查询都是方便的一行:

代码语言:javascript
复制
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相同),我最接近的解决方案是这样的:

代码语言:javascript
复制
(\r\n".*)(.*)\r\n(.*"\r\n)

原谅我的n00biness。向你问好,林克斯·开普勒

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 15:48:48

如果下一个"位于行尾,则可以首先删除所有CRLF:

代码语言:javascript
复制
result = subject.replace(/\r\n(?=[^"]*"$)/mg, " ");

解释:

代码语言:javascript
复制
\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.

这会将您的示例转换为

代码语言:javascript
复制
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

然后,在第二步中,删除引号:

代码语言:javascript
复制
result = subject.replace(/^"|"$/mg, "");
票数 2
EN

Stack Overflow用户

发布于 2011-05-18 15:48:21

使用Perl,您可以执行如下操作:

s/^"([^"]*)"$/$s = $1; $s =~ s!(?:\n|\r)+! !g; $s/meg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6046708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档