[英]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.