2016-05-17 94 views
0

我需要一些帮助与跟进此格式的正则表达式:字符串的正则表达式,重复,次数群

第一部分是一个电子邮件地址,随后的8个列由";"分。

[email protected];Alex;Test;Alex A.Test;Alex;12;34;56;78 

第一部分我已经是(.*@.*com

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

[email protected];Alex;;Alex A.Test;;12;34;56;78 
[email protected];Alex;;Alex A.Test;Alex;;34;;78 
[email protected];Alex;Test;;Alex;12;34;56; and so on 
+1

什么语言是您使用? –

+1

最简单的方法是用编程语言中的分号分割字符串。你在用什么(这不是正则表达式)? –

+0

这是一个bash脚本,所以我会使用sed。 – calabash

回答

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]" 

假设数字只有两位数字

1

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

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

如果你有不同数量的ADRESS后列的改变{}

之间的数

在这里输入内容:

1. `[email protected]` 
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" 
+0

这个为我做的工作,谢谢。 sed命令必须如何才能在此模式之后仅打印行? – calabash

+0

使用正则表达式看看[这里](http://unix.stackexchange.com/questions/78625/)。告诉你是否正在寻找。 –

+0

试试这个:'sed -i -E“/(.*@.*com)(([^\";\n]*|\"[^\"\n]*\");){8} (([^ \“; \ n] * | \”[^ \“\ n] * \”))/ p“' –