正则表达式可选组反向引用

Regexoptional group backreference

作为一家翻译公司,我们花费大量时间准备 Indesign 文件以供翻译。为此,我们已经创建了几个 JAVA 脚本。 我想要实现的一件事是用空格替换小数点。 这适用于普通数字(8.480 或 8.487),使用简单的正则表达式,如 ^(\d+)(\.)(\d+)$

但是,我们也有这样的数字组合:1.240x899x987 或 987x1.048x987。部分或全部数字可能包含也可能不包含小数点。我可以使用可选组搜索数字:^(\d+)(\.?)(\d+)(x)(\d+)(\.?)(\d+)(x)(\d+)(\.?)(\d+)$

我 运行 遇到了使用编号反向引用替换这些字符串的问题。 如果可选组不为空,则它采用编号引用,并且 $1\s$3$4 returns 1 240x。但是,如果该组为空,则反向引用编号都会更改。

有没有办法在正则表达式中检查是否为 null(如果不为 null)?所以我可以说 'if the optional group is not null, replace it with space'? 简而言之,我需要一种方法来将 1.287x989x150 和 987x1.048x987 和 987x313x1.487 更改为空格而不是单个正则表达式中的点十进制?这甚至可能吗?

目前,我已将这三种情况分成 javascript 中的非贪婪方式(匹配这三种情况的确切模式)中的单独搜索和替换 GREP,但如果可能的话, if 子句会更整洁。

亲切的问候

为什么不简化事情并用空格替换所有点,前提是这些点被数字包围?您可以通过搜索

(?<=\d)\.(?=\d)

并用简单的 " ".

替换所有内容