2

我一直在努力在 Postgres 中编写一些正则表达式来过滤掉我字符串中的一些垃圾。以下是我遇到的一些不同案例:

AUTO PARTS STORE 15
AUTO PARTS STORE #15
AUTO PARTS STORE #A15
AUTO PARTS STORE #AB15
AUTO PARTS STORE #A 15
AUTO PARTS STORE #A A15
AUTO PARTS STORE #15A
AUTO PARTS STORE #15-15

# 后面的数字可以是一个或多个。此外,“STORE”和“#”之间不能有空格。

我要过滤的是“STORE”和之后的任何商店编号,无论其格式如何。

到目前为止,这是我开发的:

select regexp_replace(estab_name,E'STORE (#)?( )?([A-Z])?([A-Z])?( )?\\d+\\Z',' ')

这是我遗漏的一些案例的示例,以及我想返回的内容(注意 - 这是基于评论的第三方编辑 - 向 OP 展示我认为他的意思;并邀请更正):

If the input string is:              I would like to remove:    I would like to return:
7-ELEVEN FOOD STORE #11150A          STORE #11150A                7-ELEVEN FOOD
7-ELEVEN FOOD STORE #20132C          STORE #20132C                7-ELEVEN FOOD
7-ELEVEN FOOD STORE #2306-2134       STORE #2306-2134             7-ELEVEN FOOD
7-ELEVEN STORE #2301-14410N          STORE #2301-14410N           7-ELEVEN
7-ELEVEN STORE # 14279B TODD BAXTER  STORE # 14279B TODD BAXTER   7-ELEVEN
84 LUMBER COMPANY, LP, STORE: #0922  STORE: #0922                 84 LUMBER COMPANY, LP,
BIG LOTS STORE# 1886                 STORE# 1886                  BIG LOTS
KROGER STORE J-978                   STORE J-987                  KROGER

任何帮助将不胜感激。我对编写复杂的正则表达式非常陌生,这现在正在扼杀我的大脑。

4

3 回答 3

3

从显示的示例中,您肯定会紧随其后:

 STORE ?:? ?#?[A-Z0-9 -]+$
于 2013-06-28T22:30:42.277 回答
0

如果我对您所问内容的解释是正确的,那么您要匹配的是“'STORE' 这个词之后直到字符串结尾的所有内容”。在这种情况下,您的正则表达式很简单

STORE.*$

您可以在http://rubular.com/r/05sNzmXdqS看到这一点。如果我的解释是倒退的,并且您想匹配“单词之前的所有内容STORE”,那么您的正则表达式是

^.*(?=STORE)

使用“前瞻”来表示“直到您右边的字符为“STORE”的所有内容。您可以在http://rubular.com/r/7Up8vVwzZa上看到这一点

如果您还需要消除“STORE”之前的空格,我相信您可以弄清楚如何更改表达式。

于 2013-07-01T21:05:11.950 回答
0

使用 \b 作为单词边界

 \bSTORE.*
于 2013-06-28T22:32:08.803 回答