正则表达式,用于检测预定义的字符串代码或一组这些代码

时间:2017-04-26 20:40:45

标签: regex

我试图找出如何检测更大字符串中的两位数字符串代码,因为它可以有一个代码或两个代码按/分组。

示例:我在文件上有这些行,而我的正则表达式没有得到第一行,因为它有BL/DU。它可以包含这些代码LB|BL|DU|HO|DP|DE|CO|EC或其中一个斜杠和另一个代码。

11645772  - . . - A NORA QUE A MAMAE PEDIU PRA DEUS BL/DU 11/12/2014
6437320  - . . - AMOR FATAL LB 25/06/2012 
5622777  - . . - AMOR QUE E MEU LB 16/08/2011 
5622778  - . . - AQUELA MAE LB 16/08/2011 
11645686  - . . - BALANCO DO MAR LB 11/12/2014 

这是我正在使用的正则表达式:

(\d+)\s+(-\s.\s.\s-)\s+([\w\s]+)\s+(LB|BL|DU|HO|DP|DE|CO|EC\/?LB|BL|DU|HO|DP|DE|CO|EC)\s+(\d{2}\/\d{2}\/\d{4})

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要使用(...)(?:...)对这些备选方案进行分组,并为可选的/ +代码使用可选组:

(\d+)\s+(-\s.\s.\s-)\s+([\w\s]+)\s+((?:LB|BL|DU|HO|DP|DE|CO|EC)(?:\/(?:LB|BL|DU|HO|DP|DE|CO|EC))?)\s+(\d{2}\/\d{2}\/\d{4})

请参阅regex demo

注意:如果.中的(-\s.\s.\s-)与文字点匹配,则必须对其进行转义。

更改位于:((?:LB|BL|DU|HO|DP|DE|CO|EC)(?:\/(?:LB|BL|DU|HO|DP|DE|CO|EC))?)

  • (?:LB|BL|DU|HO|DP|DE|CO|EC) - 匹配其中一个双字母代码
  • (?:\/(?:LB|BL|DU|HO|DP|DE|CO|EC))? - 可选地(由于最后?量词匹配1或0次匹配)匹配/ + 2个字母的代码。