为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红颜莎娜 2023-03-08 15:20:19
我发现了多篇带有负面前瞻性的帖子,但我似乎无法让它适用于这个特定的用例。我有多行具有以下 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
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

尝试这个:(^\w+\])|(\[\w+$)

(^\w+\])-在一行的开头匹配\w一次且无限次,然后是.^\]

| - 或者

(\[\w+$)- 匹配\w一次和无限次前面的\[行尾$

演示


查看完整回答
反对 回复 2023-03-08
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

看起来你正在尝试匹配这个。

不过,环视断言需要什么?


(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


查看完整回答
反对 回复 2023-03-08
?
暮色呼如

TA贡献1853条经验 获得超9个赞

以下正则表达式将根据需要匹配您的行:

(^[^\[\]]*?\])|(\[(?!.*?\]).*)

正则表达式演示

(^[^\[\]]*?\])|(\[[^\[\]]*$)必须为不使用前瞻性和更简单的工作而工作。您可以将正则表达式拆分为(^[^\[\]]*?\])(\[[^\[\]]*$),然后将每个与行匹配以使用匹配组。


查看完整回答
反对 回复 2023-03-08
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信