RegEx:捕获可能不存在的部分中的组

时间:2013-12-30 01:49:27

标签: regex

我正在解析一个包含各种个人信息的文件,并且只有存在的信息存在于文件中,即使有更多的潜在字段。例如:

[其他东西] 家庭电话: [家庭电话] 移动电话: [MOBILE_PHONE]

因此,手机部分可能看起来像以下四个示例中的任何一个:

Home Phone: 
(111) 222-3333
Mobile Phone: 
(111) 222-3334

Home Phone:
(111) 222-3333

Mobile Phone:
(111) 222-3334

[nothing]

我正在尝试使用以下正则表达式代码段来匹配家庭电话,但它根本不匹配。

(Home\sPhone.\r\n(?<hphone>\(\d\d\d\)\s\d\d\d-\d\d\d\d))?

(我知道有很多需要改进的地方,但我对这些并不是很好,所以我只是想在开始优化之前通过暴力破解它。因此,在电话号码匹配模式中重复。)

任何想法如何使我的工作?

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜你正在使用的系统会终止\r\n行,但不能同时终止。

删除\n上的{{1}}

答案 1 :(得分:0)

由于某一行的结尾通常会因系统/程序而异,因此您可以使用类似[\r\n]+的内容来覆盖一些额外的基础 - \n\r出现一次或多次。

所以你的表达会变成:

(Home\sPhone.[\r\n]+(?<hphone>\(\d\d\d\)\s\d\d\d-\d\d\d\d))?

然后你可以开始更多地压缩表达式,例如:

(Home\sPhone.[\r\n]+(?<hphone>\(\d{3}\)\s\d{3}-\d{4}))?