我不能为我的生活找出这个正则表达式
我有示例输入,例如:
- Line 1
- Line 2
- Line 3
- Line 4
我正在尝试匹配从 - 开始 - 并经过行尾的每一行。我在iOS上使用Workflow应用程序,它使用ICU正则表达式解析
我使用的模式是
(?m)^\t*(-.*)
此模式将匹配所有行,但它会捕获选项卡。我究竟做错了什么?
答案 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个标签的正向背后显示-.*
- 连字符和其余部分。