我想知道如何使用正则表达式匹配第一个字符出现
输出
# 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
答案 0 :(得分:3)
模式:
^[^:]*:
匹配输入的开头(^
),后跟除:
([^:]*
)之外的零个或多个字符,后跟:
。
所以,这匹配第一个:
(当然还有:
之前的所有内容。)
因此,我们假设您要将第一个:
替换为@
。然后,您只需将第一个:
之前的所有内容分组,如下所示:
^([^:]*):
并将其替换为:
$1@
大多数正则表达式实现都不允许模式匹配行中的第一个:
。对于这样的事情,你需要一个可变宽度的后视断言,大多数语言都不支持。
您可以逐行读取文件并在:
上拆分并提供第二个参数,指示要返回的数组的大小:
array = line.split(/:/, 2)
许多正则表达式实现都有这样一种方法(因为我不知道您正在使用的语言,所以我可以更具体。)
答案 1 :(得分:0)
为什么不直接使用:
/:/
这将匹配第一列:
答案 2 :(得分:0)
您是否在每一行单独应用正则表达式?
如果是,那就不要使用贪婪修饰符。 (See on Regexr)
你如何使用它取决于你的语言,但我认为每种语言都有可能匹配非贪婪,即在第一场比赛后停止匹配。
修改强>
使用捕获组怎么样?
^([^:\r\n]*):(.*)$
您将在第1组中的第一个:
之前找到该部分,并在第2组中找到该行之后的部分。