如何匹配某个字符串之前或行尾?
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\/|$)))
编辑:
我被迫使用句点,因为任何字符都可以。这是一个自由文本字段。
通过添加 ?
使 .+
变得懒惰,并将交替添加到 $
(?<MyGroup> 4\/(.+?)(?=(?: \d\/)|$))
(.+?)
惰性匹配导致正则表达式引擎在看到第一个 \d/
时停止,而不是继续到字符串的末尾。
我需要匹配以下字符串:
" 4/abc def"
来自
" 4/abc def 5/abc"
或
" 4/abc def"
到目前为止,我设法构建了这个正则表达式:
(?<MyGroup> 4\/(.+)(?=(?: \d\/)))
并且我尝试使前瞻成为可选的 ?
或添加 |$
但随后它捕获了所有内容。我能以某种方式使 5/abc
可选吗?
我已经用这些表达式试过了,但它们对这两种情况都不起作用:
(?<MyGroup> 4\/(.+)(?=(?: \d\/)?))
(?<MyGroup> 4\/(.+)(?=(?: \d\/|$)))
编辑:
我被迫使用句点,因为任何字符都可以。这是一个自由文本字段。
通过添加 ?
使 .+
变得懒惰,并将交替添加到 $
(?<MyGroup> 4\/(.+?)(?=(?: \d\/)|$))
(.+?)
惰性匹配导致正则表达式引擎在看到第一个\d/
时停止,而不是继续到字符串的末尾。