仅匹配任何角色的第一次出现

时间:2011-11-21 10:04:40

标签: regex

我想知道如何使用正则表达式匹配第一个字符出现

输出

    # Address 
cleanse.library.addressDoctor.AddressDoctor.UnlockCode:YR\\FKNT5ST3WCM:\\1J4JTCQQMH/H
cleanse.library.addressDoctor.AddressDoctor.DatabasePath:C:/AddressDoctor
cleanse.library.addressDoctor.AddressDoctor.Optimization:ADDRESSES_SORTED_BY_COUNTRIES
cleanse.library.addressDoctor.AddressDoctor.MemoryMB:600
cleanse.library.addressDoctor.AddressDoctor.CorrectionType:CORRECT_ONLY
cleanse.library.addressDoctor.AddressDoctor.PreLoad.CERTIFIED.PRELOAD_PART:US
cleanse.library.addressDoctor.AddressDoctor.PreLoad.CERTIFIED.PRELOAD_FULL:
cleanse.library.addressDoctor.AddressDoctor.PreLoad.CORRECTION_ONLY.PRELOAD_PART:CA, US
cleanse.library.addressDoctor.AddressDoctor.PreLoad.CORRECTION_ONLY.PRELOAD_FULL:

在这种情况下,我想只匹配:(第一次出现)

更新

注意::(每行第一次出现)

你可以test here

3 个答案:

答案 0 :(得分:3)

模式:

^[^:]*:

匹配输入的开头(^),后跟除:[^:]*)之外的零个或多个字符,后跟:

所以,这匹配第一个:(当然还有:之前的所有内容。)

因此,我们假设您要将第一个:替换为@。然后,您只需将第一个:之前的所有内容分组,如下所示:

^([^:]*):

并将其替换为:

$1@

如下所示:http://regexr.com?2v8h8

修改

大多数正则表达式实现都不允许模式匹配行中的第一个:。对于这样的事情,你需要一个可变宽度的后视断言,大多数语言都不支持。

您可以逐行读取文件并在:上拆分并提供第二个参数,指示要返回的数组的大小:

array = line.split(/:/, 2)

许多正则表达式实现都有这样一种方法(因为我不知道您正在使用的语言,所以我可以更具体。)

答案 1 :(得分:0)

为什么不直接使用:

/:/

这将匹配第一列:

答案 2 :(得分:0)

您是否在每一行单独应用正则表达式?

如果是,那就不要使用贪婪修饰符。 (See on Regexr

你如何使用它取决于你的语言,但我认为每种语言都有可能匹配非贪婪,即在第一场比赛后停止匹配。

修改

使用捕获组怎么样?

^([^:\r\n]*):(.*)$

here on Regxr

您将在第1组中的第一个:之前找到该部分,并在第2组中找到该行之后的部分。