如果最后存在,则通过删除模式来提取正则表达式

标签 regex regex-group

我正在尝试从包含“- E1/E2”的字段中提取值并忽略其余部分。

我用过(?<value>.*)\s+-\s+E[1-3]*但如果不包含 E1/E2,则不会提取。

低于示例值。它不适用于 2,4 样本数据。无法理解如何将 E1/E2 设为可选。

  1. 你好 - 我在 - E1
  2. 公斤
  3. 你好吗 - E3
  4. 很酷
  5. 简单 - E1 - 开发
  6. 另一个简单的 - E2 QA

最佳答案

你可以使用

^(?<value>.*?)(?:\s+(?:-\s+)?E[1-3].*)?$

参见 regex demo .

详细信息

  • ^ - 字符串开始
  • (?<value>.*?) - 组“值”:除换行字符外的零个或多个字符尽可能少
  • (?:\s+(?:-\s+)?E[1-3].*)? - 一个可选的非捕获组:
    • \s+ - 一个或多个空格
    • (?:-\s+)? - - 的可选序列和一个或多个空格
    • E[1-3] - E和来自 1 的数字至 3
    • .* - 尽可能多的除换行符以外的零个或多个字符
  • $ - 字符串结束。

关于如果最后存在,则通过删除模式来提取正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68231817/

相关文章:

java - 如何编写以下场景的正则表达式模式

javascript - 没有中间表达式重复的正则表达式 (axb|cxd)

python - 如何从 pandas 数据框中的列中删除文本

android - 如何从单个字符串中获取多个匹配的模式

javascript - 正则表达式将短语与空格匹配

java - 正则表达式 ^\\Q &\\E

Python 搜索字符串中的值

javascript - JS 正则表达式 : how to remove first 2 zero's from "08/08/2017"

python - 使用正则表达式执行分配属性

用于通过特定字符分隔条目的正则表达式