我正在使用这个正则表达式:
((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13})
匹配这样的字符串:
SH_6208069141055_BC000388_20110412101855
分成4组:
SH
6208069141055
BC000388
20110412101855
问题:如何使第一组成为可选组,以便生成的组为空字符串?
我希望在每种情况下都能得到4组。
此案例的输入字符串:(第一组后没有下划线)
6208069141055_BC000388_20110412101855
答案 0 :(得分:23)
您可以轻松简化正则表达式:
(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$
我不确定没有第一组的输入字符串是否会有下划线,但如果它是整个字符串,你可以使用上面的正则表达式。
如您所见,第二场比赛中匹配的组1为空,并从匹配的组2开始。
答案 1 :(得分:-1)
要使一个非捕获的,零到更多的匹配组,必须附加?
。
(?: ..... )?
^ ^____ optional
|____ group