如何查找和标准化章节和页面引用的拼写(Adobe InDesign)?

typ*_*aul 7 regex adobe-indesign grep-indesign

我想找到后跟“ f”,“ ff”,“ f”的数字。或“ ff”。按照给定的约定/规则对拼写进行标准化。

我已经尝试过一些正则表达式,但是不幸的是,我没有找到一个通用表达式来捕获上述所有情况(f,ff,f。,ff。)。

用口头表达似乎很容易:

  • 找数字
  • 后跟一个可选的空格
  • 然后是f,ff,f。或其他
  • 表达式前后仅允许空格或NOT字边界

正则表达式的开头非常简单,但是我无法弄清楚如何处理不同的“ f”情况以及后面的NOT边界。


我最好的猜测是:

(?<=\b)(\d+(\h|\b)?f{1,2})\.?
Run Code Online (Sandbox Code Playgroud)

但随后仍然发现了带有字字符的st。


当我将正则表达式扩展为:

(?<=\b)(\d+(\h|\b)?f{1,2})\.?(\W)
Run Code Online (Sandbox Code Playgroud)

“虚假资金”的数量正在减少,但这仍然不是解决方案


我准备了测试线。应当找到包含加号“ +”的行,同时不应找到带有减号“-”的行。

00f aaa +
00f. aaa +
00ff aaa +
00ff. aaa +
00 f aaa + 
00 f. aaa +
00 ff aaa +
00 ff. aaa +
+ aaa 00f aaa +
+ aaa 00f. aaa +
+ aaa 00ff aaa +
+ aaa 00ff. aaa +
+ aaa 00 f aaa + 
+ aaa 00 f. aaa +
+ aaa 00 ff aaa +
+ aaa 00 ff. aaa +
+ aaa 00f
+ aaa 00f.
+ aaa 00ff
+ aaa 00ff.
+ aaa 00 f 
+ aaa 00 f.
+ aaa 00 ff
+ aaa 00 ff.

00 faaa -
00 f.aaa -
00 ffaaa -
00 ff.aaa -
00af aaa - 
00af. aaa -
00aff aaa -
00aff. aaa -
- aaa 00 faaa -
- aaa 00 f.aaa -
- aaa 00 ffaaa -
- aaa 00 ff.aaa -
- aaa 00af aaa - 
- aaa 00af. aaa -
- aaa 00aff aaa -
- aaa 00aff. aaa -
- aaa00f
- aaa00f.
- aaa00ff
- aaa00ff.
- aaa 00af 
- aaa 00af.
- aaa 00aff
- aaa 00aff.

00faaa -
00f.aaa -
00ffaaa -
00ff.aaa -
00af aaa - 
00af. aaa -
00aff aaa -
00aff. aaa -
- aaa00 faaa -
- aaa00 f.aaa -
- aaa00 ffaaa -
- aaa00 ff.aaa -
- aaa00af aaa - 
- aaa00af. aaa -
- aaa00aff aaa -
- aaa00aff. aaa -
- aaa00af 
- aaa00af.
- aaa00aff
- aaa00aff.
Run Code Online (Sandbox Code Playgroud)

此外,目标是以某种方式将数字和“ f”-大小写进行分组,以便它们可以用于替换表达式中以将拼写标准化为这些情况之一:

  • 123页及以下 (带空格,带点)
  • 123 ff(带空格,不带点)
  • 123ff。(无空格,带点)
  • 123ff(无空格,无点)

Wik*_*żew 5

我建议

\b(\d+)(\s?)(f{1,2})(?:(\.)\B|\b(?!\.))
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

细节

  • \b -字边界
  • (\d+) -第1组:1个以上数字
  • (\s?) -第2组:可选的空格
  • (f{1,2})-第3组:1或2 f
  • (?:(\.)\B|\b(?!\.)) -两者之一:
    • (\.)\B- .如果未跟单词char一起在第4组中捕获
    • | - 要么
    • \b(?!\.) -单词边界,后跟点。

然后,替换很容易:

  • 123 ff.$1 $3.
  • 123 ff$1 $3
  • 123ff.$1$3.
  • 123ff$1$3

如果替换模式中不需要空格和点,请删除分组并调整替换后向引用中的ID。

  • @RobC我写道:*`(\ h?)`-第2组:一个可选的水平空白**(如果此处允许使用任何空白,请使用`\ s`)**。[我的\ b(\ d +)(\ s?)(f {1,2})(?:(\。)\ B | \ b(?!\。))正则表达式有效] [https:// regex101.com/r/4T8EZI/5)。编辑以摆脱`\ h`。 (2认同)