正则表达式:每行只匹配第一次出现

Flo*_*yer 10 regex

我想从每一行中选择第一个“ - ”:

123 - foo - asdf
234 - bar - abcdefg
345 - foobar and hello world
Run Code Online (Sandbox Code Playgroud)

如果您使用\s-\s它将从前 2 行中选择两个事件。

所以我想要的是这个:

在此处输入图片说明

我想要 1 个空格,然后是一个连字符,然后是另一个空格\s-\s,而不仅仅是连字符并将其替换为test,这是第一行:123testfoo - asdf

我认为您必须添加 a?以使其不贪婪,但我不知道如何。

谢谢。

编辑:这是目标

我有一个巨大的 ID 和文本文件,我想创建一个 MySQL INSERT 语句。所以我想\s-\s, '(在那部分)替换第一次出现。

ctw*_*els 10

要匹配每一行的第一次出现,您需要将模式锚定到行的开头。

请参阅此处使用的正则表达式

^([^-]*?)\s*-\s*
Run Code Online (Sandbox Code Playgroud)
  • ^ 在行首断言位置
  • ([^-]*?)捕获任意-次数以外的任何字符,但尽可能少地进入捕获组 1
  • \s*-\s*匹配任意数量的空白字符,后跟连-字符,然后是任意数量的空白字符

替代品: $1, '

标记$1是对第一个捕获组最近捕获的文本的引用。