我使用这个正则表达式:
((?:[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
要创建一个非捕获、零到多匹配组,必须附加代码>。
(?: ..... )?
^ ^____ optional
|____ group
您可以很容易地将正则表达式简化为:
(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$
^ ^^
|--------------||
| first group ||- quantifier for 0 or 1 time (essentially making it optional)
我不确定没有第一组的输入字符串是否会有下划线,但是如果是整个字符串,您可以使用上面的正则表达式。
regex101演示
如您所见,第二个匹配中匹配的组1为空,从匹配的组2开始。