我想知道如何使用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:在这种情况下,我只想匹配: (第一次出现)
更新
注:: (每行第一次出现)
你可以在这里测试
发布于 2011-11-21 10:09:19
模式:
^[^:]*:匹配输入(^)的开头,后面跟着除: ([^:]*)之外的零个或多个字符,后面跟着一个:。
因此,这与第一个: (当然也包括:之前的所有内容)匹配。
因此,假设您希望用一个:替换第一个@。然后,只需将第一个:之前的所有内容分组,如下所示:
^([^:]*):并将其替换为:
$1@如下图所示:http://regexr.com?2v8h8
编辑
大多数regex实现不允许模式匹配行中的第一个:。对于这种情况,您需要一个可变宽度的后置断言,而大多数语言都不支持这种断言。
您可以逐行读取文件并在:上拆分,并提供第二个参数,指示要返回的数组的大小:
array = line.split(/:/, 2)许多regex实现都有这样的方法(我不能说得更具体,因为我不知道您正在使用的语言)。
发布于 2011-11-21 10:16:18
为什么不直接用:
/:/这将与第一列:匹配。
发布于 2011-11-21 10:17:14
您是否在每一行分别应用正则表达式?
如果是,那就不要使用贪婪的修饰语。(见Regexr)
如何使用它取决于您的语言,但我假设每种语言都有可能匹配非贪婪的,即在第一次匹配之后停止匹配。
编辑:
那么使用捕获组呢?
^([^:\r\n]*):(.*)$看吧,在Regxr上
您将在第1组中的第一个:之前找到该部分,在第2组中直到行的末尾找到该部分。
https://stackoverflow.com/questions/8210071
复制相似问题