Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgres Regex返回逗号前的第一个单词和逗号后的第一个单词_Regex_Postgresql - Fatal编程技术网

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