如何使用 regexp_replace 只替换捕获组而不是完整的匹配字符串
How to use regexp_replace to replace only the capturing group and not the full matching string
我们在数据库中有一列包含类似于“150 W 96 Th St”和“4514 282 Nd St”的值。您可能已经注意到,数字街道名称和后缀之间有一个 space,即“96 TH”。
我正在尝试编写一个将删除 space 的 postgresql 查询。使用以下内容:
SELECT regexp_matches('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ')
我得到:
{" "}
表示,只返回捕获组。
然而,当我 运行
SELECT regexp_replace('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ', '')
我明白了
150 WSt
整个匹配字符串被替换。
我也试过了
SELECT regexp_replace('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ', '')
我认为这只会取代第一个捕获组。
我还应该尝试什么?
将捕获组放在要保留的内容周围,然后在替换字符串中引用它们。
SELECT regexp_replace('150 W 96 Th St', '(\d+) (St|Nd|Rd|Th)', '')
我们在数据库中有一列包含类似于“150 W 96 Th St”和“4514 282 Nd St”的值。您可能已经注意到,数字街道名称和后缀之间有一个 space,即“96 TH”。
我正在尝试编写一个将删除 space 的 postgresql 查询。使用以下内容:
SELECT regexp_matches('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ')
我得到:
{" "}
表示,只返回捕获组。
然而,当我 运行
SELECT regexp_replace('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ', '')
我明白了
150 WSt
整个匹配字符串被替换。
我也试过了
SELECT regexp_replace('150 W 96 Th St', ' \d+( )(?:St|Nd|Rd|Th) ', '')
我认为这只会取代第一个捕获组。
我还应该尝试什么?
将捕获组放在要保留的内容周围,然后在替换字符串中引用它们。
SELECT regexp_replace('150 W 96 Th St', '(\d+) (St|Nd|Rd|Th)', '')