正则表达式在固定长度记录中查找名称

时间:2014-02-13 01:23:14

标签: regex

我有这个平面文件,我想确保我只显示名字是Andrew的记录

00012 Andrew Carter
02349 John Smith
20089 Charlotte Andrew

每行按顺序包含三个字段:五位数的员工编号,名字和姓氏。每个字段由空格分隔。

3 个答案:

答案 0 :(得分:2)

我想你想找到符合以下模式的所有行:

\d+\sAndrew.+

或者,正如@Sam Sullivan指出的那样,您还可以指定位数:

\d{5}\sAndrew.+

如果您设置了正则表达式选项以允许点匹配换行符,则可以使用[^\n]+而不是最终.+,正如@Sam Sullivan所指出的那样。但正如@Casimir et Hippolyte指出的那样,默认情况下,点与新行字符不匹配。

答案 1 :(得分:0)

([0-9]{5})\s(Andrew)\s([A-Za-z\s.,-]{1,})

每个括号将捕获三条信息。

00012AndrewCarter

这需要5个数字,一个空格,名称Andrew(区分大小写),另一个空格,然后是姓氏,包括姓氏和后缀。

第三次捕获是寻找大写字母a到z,或小写字母a-z,空格,句号,逗号或短划线

所以“Carter-Smith,Jr。M.D.”是一个有效的姓氏。

答案 2 :(得分:0)

首先,这是工具可以成为你朋友的情况。 查看 expresso:“http://www.ultrapico.com/expresso.htm” 它非常适合设计和测试正则表达式 还有 RegexCoach:http://www.weitz.de/regex-coach/ 哪个实际允许你像普通代码一样步骤正则表达式

关于你的问题 开始行^ 五位数:\ d \ d \ d \ d \ d 空间:\ w 姓名:安德鲁 空间:\ w 姓氏:[A-Za-z] + 结束:$

所以: ^ \ d \ d \ d \ d \ d \ wAndrew \ W [A-ZA-Z] + $

免责声明 - 未经测试,但非常自信:)