所有
我再次陷入困境,试图以我需要的格式获取数据。我有一个看起来像这样的文本字段。
“deangelo 001 deangelo
本地名称来源:italain
来自美国名称deangelo
含义:天使
情感谱•他是所有人欢乐的泉源。
个人诚信•他的好名声是他最宝贵的财富。 个性•当你被包围时,老鹰很难翱翔 火鸡!关系•开始缓慢,但与...的关系 deangelo随着时间的推移而建立。旅行&休闲•一生一次的旅行 是他的未来。职业生涯钱•有天赋的孩子,deangelo需要 经常受到挑战。
生活的机会•欢乐和幸福等待着这个有福的人。
deangelo的幸运数字:12•38•18•34•29•16
“
在Postgresql中删除回车符和新行的最佳方法是什么?我尝试过几件事情,但没有一件事能表现出来。
select regexp_replace(field, E'\r\c', ' ', 'g') from mytable
WHERE id = 5520805582
SELECT regexp_replace(field, E'[^\(\)\&\/,;\*\:.\>\<[:space:]a-zA-Z0-9-]', ' ')
FROM mytable
WHERE field~ E'[^\(\)\&\/,;\*\:.\<\>[:space:]a-zA-Z0-9-]'
AND id = 5520805582;
提前致谢, 亚当
答案 0 :(得分:127)
select regexp_replace(field, E'[\\n\\r]+', ' ', 'g' )
阅读手册http://www.postgresql.org/docs/current/static/functions-matching.html
答案 1 :(得分:31)
select regexp_replace(field, E'[\\n\\r\\u2028]+', ' ', 'g' )
我在postgres d / b中遇到了同样的问题,但问题的换行符不是传统的ascii CRLF,它是一个unicode行分隔符,字符为U2028。上面的代码片段也会捕获该unicode变体。
更新......虽然我只是遇到了前面提到的字符&#34;在野外&#34;,但要遵循lmichelbacher的建议来翻译更多unicode newline-like字符,请使用:
select regexp_replace(field, E'[\\n\\r\\f\\u000B\\u0085\\u2028\\u2029]+', ' ', 'g' )
答案 2 :(得分:18)
OP asked specifically about regexes since it would appear there's concern for a number of other characters as well as newlines, but for those just wanting strip out newlines, you don't even need to go to a regex. You can simply do:
var initialList = new List<KeyValuePair<int, int>>();
var listOfDistinctItems = new List<KeyValuePair<int, int>>();
//populate initial list ...
foreach(var item in initialList)
{
if (listOfDistinctItems.Exists(di => di.Key == item.Key && di.Value == item.Value))
continue;
listOfDistinctItems.Add(item);
}
I think this is an SQL-standard behavior, so it should extend back to all but perhaps the very earliest versions of Postgres. The above tested fine for me in 9.4 and 9.2
答案 3 :(得分:7)
如果您需要从字符串的开头或结尾删除换行符,可以使用:
UPDATE table
SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g' );
请注意,帽子 ^
表示字符串的开头,而美元符号 $
表示字符串的结尾。
希望对某人有所帮助。