如何匹配某个字符串之前或行尾?

How to match a string before something or the end of line?

我需要匹配以下字符串:

" 4/abc def"

来自

" 4/abc def 5/abc"

" 4/abc def"

到目前为止,我设法构建了这个正则表达式:

(?<MyGroup> 4\/(.+)(?=(?: \d\/)))

并且我尝试使前瞻成为可选的 ? 或添加 |$ 但随后它捕获了所有内容。我能以某种方式使 5/abc 可选吗?

我已经用这些表达式试过了,但它们对这两种情况都不起作用:

(?<MyGroup> 4\/(.+)(?=(?: \d\/)?))
(?<MyGroup> 4\/(.+)(?=(?: \d\/|$)))

SAMPLE

编辑:

我被迫使用句点,因为任何字符都可以。这是一个自由文本字段。

通过添加 ? 使 .+ 变得懒惰,并将交替添加到 $

(?<MyGroup> 4\/(.+?)(?=(?: \d\/)|$))
  • (.+?) 惰性匹配导致正则表达式引擎在看到第一个 \d/ 时停止,而不是继续到字符串的末尾。

Regex Demo