我正在试图匹配猫列表中的标签号:
Abyssinian 987
Burmese a1a
Dragon Li 2B
987 Cat
cat 987 Toyger
cat A1A Siamese
1猫列表的标签号是:
987
a1a
2B
987
987
A1A
1我尝试使用正则表达式:
\b[0-9a-zA-Z]{1,3}\b问题是,它将匹配“猫”和“李”(在龙里)。它应该只匹配标签号。
标签号的要求是:
另外,我使用Postgres正则表达式,我认为它使用POSIX正则表达式。(http://www.postgresql.org/docs/9.3/static/functions-string.html)
发布于 2014-04-02 21:35:35
这在PostgreSQL中是可行的:
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
发布于 2014-04-02 17:22:22
您可以使用这个regex:
\b(?=\w*?\d)\w{1,3}\b在线演示
测试:使用grep -P的
grep -oP '\b(?=\w*?\d)\w{1,3}\b' file
987
a1a
2B
987
987
A1A
1https://stackoverflow.com/questions/22818517
复制相似问题