【问题标题】:Regex match only first char正则表达式仅匹配第一个字符
【发布时间】:2016-08-12 08:32:07
【问题描述】:

所以基本上我有以下几行:

line1:blabla:etcetc
line2:blabla2:etcetc2
line3:blabla3:etcetc3

我只需要捕获第一个 ' : ' 。这是我现在的正则表达式,但它捕获了所有的 ' : '

[(:*?)]

【问题讨论】:

  • 第一个:要做什么?
  • 我需要用 \t 替换它
  • 您使用哪种语言/工具?每一行是一个单独的字符串还是都包含在一个字符串中?

标签: regex match capture


【解决方案1】:

请注意,[(:*?)] 正则表达式匹配 1 个符号,即 (:*?),因为外部括号形成 字符类 em>(或 POSIX 正则表达式中的括号表达式),您可以在其中定义此构造可以匹配的字符或其范围,但它将匹配属于集合/范围的 1 个字符。

第一个:可以匹配

^([^:]*):

并替换为$1\t

regex demo

详情

  • ^ - 字符串开头
  • ([^:]*) - 第 1 组捕获除 : 之外的 0+ 个字符,并使用 nregated 字符类 [^:](注意我们捕获我们需要保留的内容)
  • : - 文字 :(注意我们匹配我们需要替换的内容)

替换模式中的$1 指的是在第 1 组中捕获的值。

【讨论】:

  • 非常感谢您的回答!
  • 请注意,根据工具/语言/方法,它可能需要^([^:]*):(.*) -> $1\t$2。如果必须处理每一行 line,甚至可以使用 (?m) 修饰符(如 (?m)^([^:\n]*):(.*))。
  • 感谢您的信息! $1\t 工作正常。我正在为此使用 emeditor
  • 我刚刚添加了您的正则表达式匹配的解释。基本上,如果启用了全局匹配,它将匹配集合中的第一个字符或所有字符。
  • 如果有人需要像我一样匹配第一个而不是以前的 split,它不允许你替换,这就是在 Java 中解决它的方法@ 987654342@。这给了你2个字符串:第一个:之前是什么,其余的是:
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
相关资源
最近更新 更多