用正则表达式清理公司名称

时间:2014-03-21 06:14:10

标签: regex postgresql replace pattern-matching

我有一个数据集(postgresql),其中包含一个包含逗号分隔公司名称的字段。大多数公司名称由常规字符(字母数字+空格)组成,但是有一些后缀例如",inc。"或",ltd。"。为了将公司名称拆分为单独的字符串,我需要首先删除用于表示公司名称后缀的逗号(这是外部要求)。所以,例如在

  

Burn To Ground,Groupwise,Ltd.,People,Inc.,SepiaShot

我的正则表达式应该能够删除第二个和第四个逗号,但不能删除其他逗号。我想知道是否可以使用正则表达式来完成。我尝试了几种使用平衡组和环视的解决方案,但我无法使其发挥作用。

2 个答案:

答案 0 :(得分:3)

Aelor很接近,但使用的是积极的而不是消极的断言,并没有处理空间。 (实际上,根据评论,Aelor回答了提出的具体问题;我正在展示如何避免在分裂时忽略它们而完全删除逗号。)

还添加了corporateinformation.com的公司名称后缀的完整列表。

regress=> SELECT regexp_split_to_table(
            'Burn To Ground, Groupwise, Ltd., People, Inc., SepiaShot', 
            '\,(?!\s(?:A\. en P\.|AB|AB|A\.C\.|ACE|AD|AE|AG|AG|AG|AL|AmbA|ANS|Apb|ApS|ApS & Co\. K/S|AS|A/S|A\.S\.|A\.S\.|A\.S\.|A\.S\.|ASA|AVV|Bpk|Bt|B\.V\.|B\.V\.|B\.V\.|BVBA|CA|Corp\.|C\.V\.|CVA|CVoA|DA|d/b/a|d\.d\.|d\.d\.|d\.n\.o\.|d\.o\.o\.|d\.o\.o\.|EE|EEG|EIRL|ELP|EOOD|EPE|EURL|e\.V\.|GbR|GCV|GesmbH|GIE|GmbH & Co\. KG|GmbH|GmbH|GmbH|HB|hf|IBC|Inc\.|Inc|I/S|j\.t\.d\.|KA/S|Kb|Kb|KD|k\.d\.|k\.d\.|KDA|k\.d\.d\.|Kft|KG|KG|KGaA|KK|Kkt|Kol\. SrK|Kom\. SrK|k\.s\.|K/S|KS|Kv|Ky|Lda|LDC|LLC|LLP|Ltd\.|Ltda|Ltée\.|N\.A\.|NT|NV|NV|NV|NV|OE|OHG|OHG|OOD|OÜ|Oy|OYJ|P/L|PC Ltd|PLC|PMA|PMDN|PrC|Prp\. Ltd\.|PT|Pty\.|RAS|Rt|S\. de R\.L\.|S\. en C\.|S\. en N\.C\.|S/A|SA|SA|SA|sa|SA|SA|SA|SA|SA|SA|SA|S\.A\.|SA de CV|SAFI|S\.A\.I\.C\.A\.|SApA|Sarl|Sarl|SAS|SC|SC|S\.C\.|SCA|SCA|SCP|SCS|S\.C\.S\.|SCS|Sdn Bhd|SENC|SGPS|SK|SNC|SNC|SNC|SNC|SOPARFI|sp|SpA|spol s\.r\.o\.|SPRL|Sp\. z\.o\.o\.|Srl|Srl|Srl|Srl|Srl|td|TLS|VEB|VOF|v\.o\.s\.)) ?',
            'i'
          );
 regexp_split_to_table 
-----------------------
 Burn To Ground
 Groupwise, Ltd.
 People, Inc.
 SepiaShot
(4 rows)

在PostgreSQL 9.3上测试。

考虑非美国公司后缀,例如德国“GMBH”。我强烈建议您将替换结果视为可疑,并让人员验证它们是否正确。

答案 1 :(得分:2)

你可以使用这个正则表达式:

\,(?=\s(?:Ltd|Inc))

我假设您只想在这些单词之前删除逗号,如果您有更多像corp这样的单词。 REG。您可以使用|这样的

在正则表达式中添加它们
\,(?=\s(?:Ltd|Inc|Corp|Reg))

根据您的要求修改此正则表达式

这是一个快速参考的演示:

http://regex101.com/r/rT5zB1

检查替换结果