我有一个以下格式的字符串:aaa!bbb.200
where
aaa
可以是任何东西(任何长度)bbb
可以是任何东西(任何长度),除了!
!
&.200
是可选的(可以是任何 3 位数字)我想捕捉bbb
和200
例如:
aaaaa!bbbb.200
我想捕捉bbbb
&200
aaa.400
我想捕捉400
aaa!bb
我想捕捉bb
我已经能够使用以下正则表达式来做到这一点,(?:.*!(.*)\.(\d{3}$)|.*!(.*)|.*\.(\d{3}$))
但它使用|
这会使捕获组复杂化,而且对于我需要的东西来说似乎太长了
试图最后捕获除可选之外的所有字符串,最终在检查可选之前消耗所有字符串。
您可以使用
^.*?(?:!([^!]*?))?(?:\.(\d{3}))?$
请参阅正则表达式演示。详情:
^
- 字符串的开始.*?
- 尽可能少的零个或多个除换行符以外的字符(?:!([^!]*?))?
- 一个可选的序列,匹配一个或零个字符,然后尽可能少地匹配!
除字符之外的任何零个或多个字符,捕获到第 1 组!
(?:\.(\d{3}))?
- 一个可选序列,匹配一个或零个.
字符,然后是任何三个数字,捕获到第 2 组$
- 字符串结束。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句