我们在Postgresql 9.3中有下一个SQL查询
SELECT
regexp_split_to_array('merchant - mall', '(?!^)\s*(?!\d)[\-]\s*(?!\d)\s*(?=.)') as text1,
regexp_split_to_array('merchant - street 245', '(?!^)\s*(?!\d)[\-]\s*(?!\d)\s*(?=.)') as text2,
regexp_split_to_array('merchant - street-245', '(?!^)\s*(?!\d)[\-]\s*(?!\d)\s*(?=.)') as text3,
regexp_split_to_array('merchant - street - 245', '(?!^)\s*(?!\d)[\-]\s*(?!\d)\s*(?=.)') as text4
结果是:
"{merchant,mall}","{merchant,street 245}","{merchant,street-245}","{merchant,street,245}"
问题是第4个样本将数字视为单独的字符串。在postgresql中使用正则表达式有没有办法做到这一点?
使用的正则表达式(在查询中)是:
(?!^)\s*(?!\d)[\-]\s*(?!\d)\s*(?=.)
答案 0 :(得分:2)
只需在您的否定前瞻声明\s*
中添加(?!\d)
:
(?!^)\s*(?<!\d)[\-]\s*(?!\s*\d)\s*(?=.)
^ ^^
或者您可以使用以下简化的正则表达式:
(?<!\d)\b[ -]+\b(?!\d)
请参阅DEMO