Postgres Regex返回逗号前的第一个单词和逗号后的第一个单词
我正试图用正则表达式从一个专栏中得到名字和姓氏,但我被难住了 我正在努力:Postgres Regex返回逗号前的第一个单词和逗号后的第一个单词,regex,postgresql,Regex,Postgresql,我正试图用正则表达式从一个专栏中得到名字和姓氏,但我被难住了 我正在努力: select substring('SMIRTH JR, DAVID ALLEN', '^[^ ,]+') as namemodified 它应该会回来 SMIRTH, DAVID 但它只返回姓氏。我不知道怎样才能两者兼得 我还需要它为以下方面工作: SMIRTHJR, DAVID ALLEN 因为数据不是很干净。有什么想法吗?使用regexp\u matches函数而不是子字符串(假设Postgresql
select
substring('SMIRTH JR, DAVID ALLEN', '^[^ ,]+') as namemodified
它应该会回来
SMIRTH, DAVID
但它只返回姓氏。我不知道怎样才能两者兼得
我还需要它为以下方面工作:
SMIRTHJR, DAVID ALLEN
因为数据不是很干净。有什么想法吗?使用
regexp\u matches
函数而不是子字符串
(假设Postgresql 9.x):
以上两个输入字符串都将返回
SMIRTH,DAVID
,对于SMIRTHJR,DAVID ALLEN
或SMIRTH JR,DAVID ALLEN^[^\s,]+|[^\s,]+$
只返回SMIRTH
。但对于我来说,它也需要为:SMIRTHJR,DAVID ALLEN
工作,因为数据不是很干净。要求,这会更容易。@WiktorStribiżew,因为数据不是很干净-有人可以发明额外的例子,比如SMIRTHJR,DAVIDALLEN
-现在怎么办?数据总是在逗号后有空格,所以我们只需要担心JR/SR和空格。我只是希望有一个能在5.1.1上运行的解决方案-我被旧版本卡住了(使用@WiktorStribiżew的工具,它可以工作,但在我的版本中,我收到一个错误,说它无法识别函数-我的版本不支持regexpż匹配:(预期的输出是'SMIRTH,DAVID'--哦,我将编辑我的问题。我测试了它,但得到的是'SMIRTHJR,DAVID ALLEN'而不是'SMIRTH,DAVID'Try选择regexpżż('SMIRTH,DAVID ALLEN','^([^,\s]+?)([JS]R)?\y[^,]*,\s*(\s+\y)。*$,'\3,\1')
它根本不过滤名称,也许还可以。
select
regexp_matches(regexp_replace('SMIRTHJR, DAVID ALLEN','(JR|SR),', ','),
'([^\s,]+).*?(, [^\s,]+) [^\s,]+$') as namemodified