正则表达式匹配一个单词后跟一个变化的东西

时间:2013-06-28 22:25:53

标签: regex

我一直在写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

非常感谢任何帮助。我很想写复杂的正则表达式,这现在正在扼杀我的大脑。

3 个答案:

答案 0 :(得分:3)

从显示的例子中你肯定只是:

 STORE ?:? ?#?[A-Z0-9 -]+$

答案 1 :(得分:0)

使用\ b进行单词边界

 \bSTORE.*

答案 2 :(得分:0)

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

STORE.*$

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

^.*(?=STORE)

使用“前瞻”说“你右边角色的所有地方都是”STORE“。你可以在http://rubular.com/r/7Up8vVwzZa

看到这一点

如果您需要在“STORE”之前删除空格,我相信您可以找出如何更改表达式。