[英]Python regex match until certain word after identaion
给定以下字符串或类似内容:
baz: bar
key: >
lorem ipsum 1213 __ ^123
lorem ipsum
foo:bar
anotherkey: >
lorem ipsum 1213 __ ^123
lorem ipsum
我试图建立一个正则表达式,它捕获一个键后跟一个>
符号后的所有值。
因此对于上面的示例,我想从key
到foo
(不包括)匹配,然后从anotherkey
到末尾anotherkey
。 我设法提出一个可完成此工作的REGEX,但前提是我知道foo
的名称:
\w+:\s>\n\s+[\S+\s+]+(?=foo)
但这并不是一个好的解决方案。 如果删除?=foo
则匹配项将包含字符串的所有内容。 我如何解决此正则表达式以匹配>
后所述的值?
(按要求 ;)
您可以使用类似
^\w+:\s*>\n(?:[ \t].*\n?)+
(这没有小组。如果您决定不参加,请参阅问题的注释。)
它与行( ^
)的开头匹配,后接至少一个单词字符( \\w
AZ,az,0-9或'-'。如果只允许使用小写字母,则可以更改为[az]
)。
然后,它匹配可选的空格( \\s*
),后跟>
键终止符和换行符( \\n
)。
然后是一个非捕获组( (?:
:)匹配:
该组(与缩进线匹配)可以重复任意次(但必须至少存在一次- )+
)。
如果不确定缩进是否存在,那么这是获得所需结果的最简单方法:
^\w+:\s+>(?:\s?[^:]*$)*
说明:
^ # Start of line
\w+:\s+> # Match specific block
(?: # Start of non-capturing group (a)
\s? # Match a newline
[^:]*$ # Match rest of line if only it doesn't have a :
)* # End of non-capturing group (a) (zero or more times - greedy)
如现场演示中所示,您需要打开m
标志。
如果前导空格始终存在,那么可以使用此更安全的正则表达式:
^\w+:\s+>(?:\s?[\t ]+.*)*
m
修饰符也应在此处设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.