我试图找出如何检测更大字符串中的两位数字符串代码,因为它可以有一个代码或两个代码按/
分组。
示例:我在文件上有这些行,而我的正则表达式没有得到第一行,因为它有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})
谢谢!
答案 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个字母的代码。