用于匹配大括号中的每一行的正则表达式
Posted
技术标签:
【中文标题】用于匹配大括号中的每一行的正则表达式【英文标题】:Regex for matching every line enclosed in curly brackets 【发布时间】:2020-07-07 16:30:39 【问题描述】:我正在尝试匹配大括号内的每一行,并且我正在努力捕捉我想要的内容。举个例子,如果我有这样的文字:
这是一条线, 这 = 另一行, 这是第三行! 这确实是另一条线 , 第二轮: 我们现在在第二对括号上, 这是最后一行。那我要匹配捕获一共六行:
this is a line,
this = another line,
this is the third line!
this is, indeed, another line
we're now on the second pair of brackets,
and this is the final line.
到目前为止,我目前的想法是尝试匹配“花括号”->“任何东西”->“行”->“任何东西”->“花括号”,即类似这样的东西:
(?s)[^]*(^([^^\n]+)$)(?s)[^]*
但这只匹配每对花括号中的一行,而不是 每一行。
我该怎么做呢?谢谢。
编辑:更新了示例以在一个左大括号和不同的空格之前包含前面的文本。
【问题讨论】:
@WiktorStribiżew 编辑了我的帖子以展示我到目前为止所获得的信息。 您是否尝试过不匹配大括号?[^\\]+
@Dunois 这将匹配大括号中的全部内容,而不是一次只匹配一行。
输入格式是否正确?即,有没有前面没有
的
?
您的文件最初是 JSON 文档吗?它看起来有点像一个对象数组。如果是这样,最好使用 JSON 解析器来选择这些项目。
【参考方案1】:
只匹配不包含大括号的行:
^[^\r\n]+$
要设置多行标志 (/m
)。或者,在正则表达式的开头插入 (?m)
。
Demo
正则表达式为“匹配行首,后跟除、
、
\r
和\n
之外的一个或多个字符,然后是行尾”。
要排除每个匹配行中的前导空格,您可以稍微修改正则表达式:
^\s*\K[^\r\n]+$
Demo
\K
重置匹配的起点,不包括任何先前使用的字符。 \K
不适用于所有正则表达式引擎。
【讨论】:
效果很好。谢谢! @Step 如果你真的需要匹配不包含大括号的行,你需要(?m)^[^\r\n]+$
@Wiktor,谢谢。好多了。我会做出改变。【参考方案2】:
假设输入格式正确:
([^\n](?=[^]+))+
见live demo
【讨论】:
这似乎与左大括号匹配,并且对于大括号之前的文本也不可靠:regex101.com/r/fvFF5Z/2 这与左大括号不再匹配,但对于左大括号之前的文本仍然不可靠。 @step 好的,现在排序。见演示链接。以上是关于用于匹配大括号中的每一行的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章