regex 匹配字符串上可能存在也可能不存在的组的正则表达式

62o28rlo  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(156)

我有一个文本,其中包含在中间的某个地方以下字符串:

  1. 28号卫星B158 RGX 1100
  2. 28号卫星胡佛0005 RGX B158 RGX 1100 1200
    我只想捕获以下组:
  3. 28号卫星B158 RGX 1100
  4. 28号卫星B158 RGX 1100
    为了找到第一个选项,我使用了以下正则表达式:
(\w{3}\d{2})\s+([B]\d{3})\s+(\w{3})\s+(\d{4})\s+(\d{4})

示例:https://regexr.com/772aq(文本中仅包含第一个选项)
但是,当我尝试查找第二个选项时,我添加了一个非捕获组,这反过来跳过了第一个选项:

(\w{3}\d{2})\s+(?:hoover\s+\d{4}\s+RGX\s+)(\[B]\d{3})\s+(\w{3})\s+(\d{4})\s+(\d{4})

示例:https://regexr.com/772at(两个选项都包含在文本中,但仅匹配第二个选项)
基本上,我添加了一个非捕获组(?:),它看起来(应该忽略)单词hoover,空格,4位数,空格,单词RGX,空格。
任何帮助都很感激。谢谢!
编辑:在www.example.com的示例中添加文本regexr.com以进行澄清。

bqf10yzr

bqf10yzr1#

正如我所看到的,你应该只使组可选(\w{3}\d{2})\s+(?:hoover\s+\d{4}\s+RGX\s+)?([B]\d{3})\s+(\w{3})\s+(\d{4})\s+(\d{4})。也不太清楚为什么你已经逃脱了[之前的B,但可能是一个错别字。

相关问题