首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配任何字符的第一次出现

只匹配任何字符的第一次出现
EN

Stack Overflow用户
提问于 2011-11-21 10:04:40
回答 3查看 92关注 0票数 1

我想知道如何使用regex来匹配第一个字符的出现。

输出

代码语言:javascript
复制
    # 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:

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

更新

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

你可以在这里测试

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-21 10:09:19

模式:

代码语言:javascript
复制
^[^:]*:

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

因此,这与第一个: (当然也包括:之前的所有内容)匹配。

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

代码语言:javascript
复制
^([^:]*):

并将其替换为:

代码语言:javascript
复制
$1@

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

编辑

大多数regex实现不允许模式匹配行中的第一个:。对于这种情况,您需要一个可变宽度的后置断言,而大多数语言都不支持这种断言。

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

代码语言:javascript
复制
array = line.split(/:/, 2)

许多regex实现都有这样的方法(我不能说得更具体,因为我不知道您正在使用的语言)。

票数 3
EN

Stack Overflow用户

发布于 2011-11-21 10:16:18

为什么不直接用:

代码语言:javascript
复制
/:/

这将与第一列:匹配。

票数 0
EN

Stack Overflow用户

发布于 2011-11-21 10:17:14

您是否在每一行分别应用正则表达式?

如果是,那就不要使用贪婪的修饰语。(见Regexr)

如何使用它取决于您的语言,但我假设每种语言都有可能匹配非贪婪的,即在第一次匹配之后停止匹配。

编辑:

那么使用捕获组呢?

代码语言:javascript
复制
^([^:\r\n]*):(.*)$

看吧,在Regxr上

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8210071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档