我一直在写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
非常感谢任何帮助。我很想写复杂的正则表达式,这现在正在扼杀我的大脑。
答案 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”之前删除空格,我相信您可以找出如何更改表达式。