1

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

文本字段内容如下所示:

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

使用

^[^#]+

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

在此处输入图像描述

Grep 模式将如何获得:

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

在每一行。

4

2 回答 2

2

在 InDesign UI 中,您可以

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

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

grep 样式到高亮字段

如您所见,应用的属性没有重叠,因此所有内容都只标记一次。

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

于 2015-01-18T22:23:42.423 回答
1

您需要将-P参数与 grep 一起使用。

$ 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
于 2015-01-18T14:14:20.743 回答