【问题标题】:Regex: Match Specific Character in Parentheses正则表达式:匹配括号中的特定字符
【发布时间】:2016-05-26 15:09:26
【问题描述】:

我有以下字符串:

Character (ccdd)

出于愚蠢的设计原因,c 和 d 是必需的。我想特别突出 c 和 d,以便

a) 匹配“cc” 和 b) 匹配“dd”

要求它仅在括号中时才匹配。

但我就是不明白。到目前为止,我唯一做到的是:

(?<=\()[c]+?(?=\))

编辑:进一步澄清。我需要对 InDesign 中括号中的 c 和 d 应用两种不同的样式。因此,我正在寻找两个单独的正则表达式,一个匹配括号中的所有 c,一个匹配所有 d。

谁有想法?

谢谢!

【问题讨论】:

  • 你能确认一件事吗:-检查\G在indesign中的工作位置?
  • (?&lt;=\([^()]*)c+(?=[^()]*\)) - 如果支持无限宽度环视。
  • 我不太明白你想做什么。你想匹配的字符串总是(ccdd)吗?然后您可以将其用作文字模式。
  • 尝试破解 c+(?=[^()]*\))d+(?=[^()]*\))
  • 效果很好,@WiktorStribiżew。非常感谢,也感谢所有其他人。你想把它作为答案发布给其他人看吗?

标签: regex adobe-indesign


【解决方案1】:

由于不支持无限后视和\G,我建议使用hack:只需检查cs 或ds 是否后跟右括号。

使用

c+(?=[^()]*\))

d+(?=[^()]*\))

如果括号平衡良好并且没有嵌套括号,则该技巧将起作用。

【讨论】:

  • 最新版本的 InDesign 支持\K。可以将其用作\G 解决方案的替代方案吗? (我不知道\G 做了什么,但听起来差不多。)
  • \K 忽略匹配缓冲区中的所有文本。如果支持\K,则\G(匹配字符串的开头或前一个匹配的结尾)。它可以与 (?:\(|(?!^)\G)[^()]*?\Kc+(?=[^()]*\)) 之类的模式匹配。
猜你喜欢
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多