繁体   English   中英

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

[英]Regex to match lines starting with a \t or - but only capture - on

对于我的生活,我无法弄清楚这个正则表达式

我有示例输入,如:

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

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

我正在使用的模式是

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

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

尝试这个:

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

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

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

(?m)(-.*)

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

(?m)-.*

正如评论中所提到的那样

你问为什么你的正则表达式捕获标签。 这是不是这样:你的正则表达式匹配的标签,并捕获 -与行的其余部分的选项卡后。 关键是你正在使用消费模式,即返回匹配/捕获字符串的模式。

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

ICU正则表达式中 ,lookbehinds具有约束宽度 ,也就是说,如果使用限制量词 ,则可以使用它。 由后视图案匹配的可能字符串的长度不得无限制(无*+运算符。)

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

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

这里,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM