正则表达式,重复,计数组

时间:2016-05-17 10:05:40

标签: regex count repeat regex-group

我需要一些关于这种格式的正则表达式的帮助:

字符串的第一部分是电子邮件地址,后面是八列除以";"

a.test@test.com;Alex;Test;Alex A.Test;Alex;12;34;56;78

我的第一部分是(.*@.*com

这些也是可能的源字符串:

a.test@test.com;Alex;;Alex A.Test;;12;34;56;78
a.test@test.com;Alex;;Alex A.Test;Alex;;34;;78
a.test@test.com;Alex;Test;;Alex;12;34;56; and so on

3 个答案:

答案 0 :(得分:1)

你可以试试这个正则表达式:

^(.*@.*com)(([^";\n]*|"[^"\n]*");){8}(([^";\n]*|"[^"\n]*"))$

如果您在地址后更改了{}之间的数字

,则列数不同

这里的数据是捕获:

1.  `a.test@test.com`
2.  `56;`
3.  `56`
4.  `78`

Here the test

如果你确定字符串中没有",你可以使用它:

^(.*@.*com)(([^;\n]*);){8}([^;\n]*)$

Here the test

修改

OP提出了这种用法:
要使用带有sed的第一个正则表达式,您需要-i -n -E个标记并转义"个字符。
结果将如下所示:

sed -i -n -E "/(.*@.*com)(([^\";\n]*|\"[^\"\n]*\");){8}(([^\";\n]*|\"[^\"\n]*\"))/p"

答案 1 :(得分:0)

你可以拥有像

这样的东西
".*@.*\.com;[A-Z,a-z]*;[A-Z,a-z]*;[A-Z,a-z, ,.,]*;[A-Z,a-z]*;[0-9][0-9];[0-9][0-9];[0-9][0-9];[0-9][0-9]"

假设数字只有两位数

答案 2 :(得分:0)

使用awk可以轻松完成:

awk -F ';' '$1 ~ /\.com$/{print NF}' file

9
9
9

cat file

a.test@test.com;Alex;;Alex A.Test;;12;34;56;78
a.test@test.com;Alex;;Alex A.Test;Alex;;34;;78
a.test@test.com;Alex;Test;;Alex;12;34;56; and so on