正则表达式匹配以\ t开头的行或 - 但仅捕获 -

时间:2016-09-20 21:03:49

标签: regex

我不能为我的生活找出这个正则表达式

我有示例输入,例如:

- Line 1 - Line 2 - Line 3 - Line 4

我正在尝试匹配从 - 开始 - 并经过行尾的每一行。我在iOS上使用Workflow应用程序,它使用ICU正则表达式解析

我使用的模式是

(?m)^\t*(-.*)

此模式将匹配所有行,但它会捕获选项卡。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个:

(?m)^[ \t]*(-.*)

首先,看起来在某些行的开头有一些空格,因此\t与空格不匹配。将\t替换为[ \t](或仅\s)将解决此问题。此外,(-*)将匹配并捕获任意数量的-,不包括以下内容。在.之前加*以匹配-之后的任意数量的字符,如下所示:(-.*)

如果您不需要前导空格,可以使用

(?m)(-.*)

如果你不关心捕捉比赛,你不需要括号,给你

(?m)-.*

如评论中所述

答案 1 :(得分:0)

您问为什么正则表达式捕获标签。事实并非如此:您的正则表达式匹配标签,而在其余部分的标签之后捕获 -。关键是你正在使用使用模式,这将返回匹配/捕获的字符串。

非消费模式 - 外观 - 可用于检查某些文本存在/不存在,但实际上并未将其放入返回的文本中。

ICU regex flavor中,外观属于约束宽度,也就是说,如果使用limiting quantifier,则可以使用它。 (由后视图案匹配的可能字符串的长度不得无限制(无*+运算符。)

因此,这将适用于行开始时可以有100个或更少的标签

(?m)(?<=^\t{0,100})-.*

在这里,

  • (?m) - 使^行的开头匹配
  • (?<=^\t{0,100}) - 在行开头之前需要0到100个标签的正向背后显示
  • -.* - 连字符和其余部分。