InDesign GREP 查找之间

InDesign GREP find between

在 InDesign 的 GREP 搜索中,我试图获取填充有 CSV 的文本字段的一部分(使用 # 作为分隔符的文件)。我想grep不同部分的原因是给每个不同的字符样式。

文本域内容如下所示:

Alpha#60x50cm#Acryl
Beta#2013#50x40cm#Öl
Gamma#2013#50x40cm#Holz
…

正在使用

^[^#]+

可以很好地获取每行的第一部分(由第一个主题标签分隔)

Grep 模式看起来如何获得:

每一行。

您需要在 grep 中使用 -P 参数。

$ grep -oP '(?<=#)[^#]*(?=#|$)' file
,2013
60x50cm
Acryl
2013
50x40cm
Öl
2013
50x40cm
Holz

将上述命令的输出更改为每行三列。

$ grep -oP '(?<=#)[^#]*(?=#|$)' file | paste - - -
,2013   60x50cm Acryl
2013    50x40cm Öl
2013    50x40cm Holz

在 InDesign UI 中,您可以

  1. 搜索^[^#]+以匹配第一个字段的内容;
  2. 搜索(?<=#)[^#]+(?=#[^#]*#[^#]*$)匹配第二个字段的内容;
  3. 搜索(?<=#)[^#]+(?=#[^#]+$)匹配第三个字段的内容;
  4. 最后搜索(?<=#)[^#]+$匹配第四个字段的内容

这依赖于所有具有 正好 四个字段(因此有 3 个 #)的行,并且将仅匹配两个 # 标记之间的文本.下图显示了将这四种应用为 GREP 样式的结果:

如您所见,应用的属性无处重叠,因此所有内容仅标记一次。

另一种方法是使用Javascript。所有行都可以在 # 字符(命令称为 split)上拆分,并且 returns 之间的文本数组。但是,这会将文本转换为纯 Javascript 字符串,并且需要一些技巧才能将结果 "back" 转换为本机格式的文本。