【问题标题】:Regular expression to extract specific text between brackets正则表达式提取括号之间的特定文本
【发布时间】:2017-10-23 22:53:26
【问题描述】:

I have read up on other questions/answers that get the text between square brackets - 但是如果我只想获取带有特定文本的括号呢?

例如,我的字符串格式如下:

{this is a}{string with text}{i want this bracket}{only}

我想通过仅搜索 wantbracket 来提取所有 {i want this bracket}ithis 可以是随机文本,例如 {gjddnsgwantjgnsagjbracket}

我可以通过执行以下操作将它们分成几组:

/\{(.*?)\}/g

但我无法在所述捕获组中搜索以提取我想要的括号。

【问题讨论】:

  • 类似THIS?
  • @Gurman,这正是我需要的 - 输入答案!谢谢!
  • @JonathanDavis 作为答案发布。

标签: regex


【解决方案1】:

试试这个正则表达式:

{(?=[^}]*want)(?=[^}]*bracket)[^}]+}

Click for Demo

说明:

  • { - 匹配 { 字面意思
  • (?=[^}]*want) - 在} 之前验证want 是否存在的正向前瞻
  • (?=[^}]*bracket) - 在} 之前验证want 是否存在的正向前瞻
  • [^}]+ - 匹配 1+ 个非 } 的字符
  • } - 匹配 } 字面意思

【讨论】:

    【解决方案2】:

    这应该可以...

    $ echo '{i want this bracket}' | grep -E '{[^}]*want[^}]*bracket[^}]*}'
    {i want this bracket}
    
    $ echo '{gjddnsgwantjgnsagjbracket[^}]*}' | grep -E '{[^}]*want[^}]*bracket[^}]*}'
    {gjddnsgwantjgnsagjbracket}
    

    【讨论】:

    • 感谢@Bill 的及时回复。如果want 位于另一个括号中并且它属于bracket,这将如何应对?它会返回两个括号吗?如果是这样,有没有办法让它只返回带有want and bracket 的括号?我希望这是有道理的。
    • 它不会匹配没有两个单词的单词。例如$ echo '{gjddnsgwantjgnsagjb}' | grep -E '{[^}]*want[^}]*bracket}' 导致不匹配。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2011-01-25
    • 2017-03-11
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多