正则表达式:将部分字符串匹配到字符,除非遇到另一个

我发现了多篇带有负面前瞻性的帖子,但我似乎无法让它适用于这个特定的用例。

我有多行具有以下 4 种模式之一(可能超过 2 个选项):

text [option1/option2] text
text] [option1/option2] more text
text [option1/option2] [text
text] [option1/option2] [text

寻找一个正则表达式(更可能是多个:一个用于左侧,一个用于右侧),它只匹配单括号文本(下面以粗体显示):

文本 [选项 1/选项 2] 文本

文本] [option1/option2] 更多文本

文本 [选项 1/选项 2] [文本

文本] [选项1/选项2] [文本

多次通过线路是可以的。另外,这是 Python,所以如果有完全不同的方法,我愿意接受建议。这只是列表中的字符串。

提前致谢-mS


红颜莎娜
浏览 128回答 3
3回答

慕运维8079593

尝试这个:(^\w+\])|(\[\w+$)(^\w+\])-在一行的开头匹配\w一次且无限次,然后是.^\]| - 或者(\[\w+$)- 匹配\w一次和无限次前面的\[行尾$。演示

慕尼黑5688855

看起来你正在尝试匹配这个。不过,环视断言需要什么?(text\] (?:\[option1/option2\])(?: \[text)?|(?:\[option1/option2\]) \[text)= (      text \] [ ]      (?: \[ option1/option2 \] )      (?: [ ] \[ text )?   |  (?: \[ option1/option2 \] )      [ ] \[ text )见 https://regex101.com/r/HxY4Uv/1您可以将捕获组包装在 3 种形式周围以查看哪些匹配,这样您就不必发布处理字符串。(text\]) (?:\[option1/option2\]) (\[text)?|(?:\[option1/option2\]) (\[text)见https://regex101.com/r/CqzZID/1

暮色呼如

以下正则表达式将根据需要匹配您的行:(^[^\[\]]*?\])|(\[(?!.*?\]).*)正则表达式演示还(^[^\[\]]*?\])|(\[[^\[\]]*$)必须为不使用前瞻性和更简单的工作而工作。您可以将正则表达式拆分为(^[^\[\]]*?\])和(\[[^\[\]]*$),然后将每个与行匹配以使用匹配组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python