首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在猫列表中查找标记号的正则表达式

用于在猫列表中查找标记号的正则表达式
EN

Stack Overflow用户
提问于 2014-04-02 17:16:53
回答 2查看 170关注 0票数 2

我正在试图匹配猫列表中的标签号:

代码语言:javascript
复制
Abyssinian 987
Burmese a1a
Dragon Li 2B
987 Cat
cat 987 Toyger
cat A1A Siamese
1

猫列表的标签号是:

代码语言:javascript
复制
987
a1a
2B
987
987
A1A
1

我尝试使用正则表达式:

代码语言:javascript
复制
\b[0-9a-zA-Z]{1,3}\b

问题是,它将匹配“猫”和“李”(在龙里)。它应该只匹配标签号。

标签号的要求是:

  • 1-3个字符,它必须至少包含一个整数(0-9)。
  • 它可以出现在字符串中的任意位置。

另外,我使用Postgres正则表达式,我认为它使用POSIX正则表达式。(http://www.postgresql.org/docs/9.3/static/functions-string.html)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-02 21:35:35

这在PostgreSQL中是可行的:

代码语言:javascript
复制
SELECT substring(cat FROM '\m(?=\w{0,2}\d)\w{1,3}\M') AS tag
FROM   cat;

\m\M .一个词的开头和结尾。

(?=\w{0,2}\d)..正前瞻

\w{1,3} ..1-3个字字符

假设每个字符串中都有一个匹配项,substring() (没有“全局”开关'g')对作业的效果要好于regexp_matches(),后者将返回数组(即使是单个匹配)。

substring()也更快一些。

SQL Fiddle

票数 4
EN

Stack Overflow用户

发布于 2014-04-02 17:22:22

您可以使用这个regex:

代码语言:javascript
复制
\b(?=\w*?\d)\w{1,3}\b

在线演示

测试:使用grep -P

代码语言:javascript
复制
grep -oP '\b(?=\w*?\d)\w{1,3}\b' file
987
a1a
2B
987
987
A1A
1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22818517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档