当最后一个标记是可选的时,如何在正则表达式中捕获除最后一个标记之外的所有标记

麦克风

我有一个以下格式的字符串:aaa!bbb.200where

  • aaa可以是任何东西(任何长度)
  • bbb可以是任何东西(任何长度),除了!
  • !&.200是可选的(可以是任何 3 位数字)

我想捕捉bbb200

例如:

  1. aaaaa!bbbb.200我想捕捉bbbb&200
  2. aaa.400我想捕捉400
  3. aaa!bb我想捕捉bb

我已经能够使用以下正则表达式来做到这一点,(?:.*!(.*)\.(\d{3}$)|.*!(.*)|.*\.(\d{3}$))但它使用|这会使捕获组复杂化,而且对于我需要的东西来说似乎太长了

试图最后捕获除可选之外的所有字符串,最终在检查可选之前消耗所有字符串。

维克托·斯特里比泽夫

您可以使用

^.*?(?:!([^!]*?))?(?:\.(\d{3}))?$

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • .*?- 尽可能少的零个或多个除换行符以外的字符
  • (?:!([^!]*?))?- 一个可选的序列,匹配一个或零个字符,然后尽可能少地匹配!除字符之外的任何零个或多个字符,捕获到第 1 组!
  • (?:\.(\d{3}))?- 一个可选序列,匹配一个或零个.字符,然后是任何三个数字,捕获到第 2 组
  • $- 字符串结束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

捕获正则表达式中除最后一个块之外的所有块

正则表达式可捕获除最后一个标签之外的所有标签

正则表达式,用于捕获BBCode中的第一个结束标记

正则表达式捕获 URL 中最后一个“/”之后的所有内容

如何在一个正则表达式中捕获所有正则表达式组?

如何在列表中搜索最后一个匹配的正则表达式

正则表达式无法捕获最后一个字母或数字之前的所有内容

Java正则表达式除最后一个字符外的所有字符

如何在使用正则表达式的最后一个模式出现后捕获字符?

正则表达式:匹配所有内容,直到最后一个空格

正则表达式-在最后一个斜杠之后使用所有角色

正则表达式在最后修复一个(所有匹配项或不匹配)

如何使用正则表达式验证捕获组中的最后一个字符

正则表达式用于替换除最后一个和第一个非空格字符外的所有字符

如何在最后一个正则表达式匹配后清除行

Xpath表达式选择内部标记的最后一个

POSIX正则表达式中的环顾四周以匹配除最后一个(对于gsub)以外的所有空格

如何创建正则表达式以返回最后一个连字符后的所有内容?

如何编写正则表达式以从URL中删除最后一个参数

如何使用正则表达式获取Python段落中的最后一个单词

用于替换第一个markdown /标记符号的正则表达式

一个用于对查询进行标记化的JavaScript正则表达式

正则表达式缺失,无法捕获最后一个键值列表条目

Python正则表达式捕获缺少换行符的最后一个单词

Python正则表达式返回最后一个匹配字符的额外捕获组

正则表达式仅捕获最后一个孩子,而不是全部

如何在正则表达式中包含点作为最后一个字符?

Java正则表达式中的强制性最后一个单词和可选的前面单词/短语

js正则表达式捕获第一个逗号之前的最后一个单词