如何删除正则表达式匹配到字符串的第一个实例(如果存在)?

时间:2018-01-27 17:57:45

标签: regex

输入(3个单独的字符串)

soft pastel
mixed media on paper
oil, sawdust on paper stretched on linen

我试图在“on”

的第一个实例之前返回字符串

我正在使用:(.*?)( on)但这不会为“soft pastel”

返回任何内容

我无法找到一种方法让“开”可选。
只有当字符串中存在“on”时,如何将regexmatch包含在“on”中?

https://regex101.com/r/LJxVtN/2

所需的输出

soft pastel
mixed media
oil, sawdust

2 个答案:

答案 0 :(得分:2)

This可能就是你要找的东西:

^(.*?)(?: on.*)?$

它同时使用延迟量词*?和“可选”运算符?,因此您还将捕获不包含on的字符串。

答案 1 :(得分:1)

根据您在提供的regex101沙箱(多行和全局)中设置的设置,执行该作业的regex是:

^(.*?)( on|$).*$

如果您使用$1作为替换字符串,结果就是您期望的结果。

https://regex101.com/r/bzqkAz/1

上查看