InDesign GREP之间找到

时间:2015-01-18 13:53:43

标签: regex adobe-indesign grep-indesign

在InDesign的GREP搜索中,我试图获取一个文本字段的部分,其中填充了CSV(使用#作为分隔符的文件)。我想要弄清楚不同部分的原因是为每个部分赋予不同的角色风格。

Textfield内容如下所示:

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

使用

^[^#]+

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

enter image description here

Grep模式将如何获得:

  • 标签1和2之间的所有内容,
  • 标签2和3之间的所有内容,
  • hashtag 3后的所有内容?

在每一行。

2 个答案:

答案 0 :(得分:2)

在InDesign界面中,您可以

  1. 搜索^[^#]+以匹配第一个字段的内容;
  2. 搜索(?<=#)[^#]+(?=#[^#]*#[^#]*$)以匹配第二个字段的内容;
  3. 搜索(?<=#)[^#]+(?=#[^#]+$)以匹配第三个字段的内容;
  4. 最后,搜索(?<=#)[^#]+$以匹配第四个字段的内容。
  5. 这依赖于完全四个字段(因而是3 #)的所有行,并且仅匹配两个#标记之间的文本。这是一个显示结果的图像,这四个应用为GREP样式:

    grep styles to highlite fields

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

    另一种方法是使用Javascript。所有行都可以在#字符上拆分(命令名为split),并返回两者之间的文本数组。但是,这会将文本转换为普通的Javascript字符串,并且将结果“返回”转换为本机格式化文本需要一些技巧。

答案 1 :(得分:1)

您需要在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