【发布时间】:2015-12-15 15:26:29
【问题描述】:
作为一家翻译公司,我们花费大量时间准备 Indesign 文件进行翻译。为此,我们已经创建了几个 JAVA 脚本。
我想要实现的一件事是用空格替换小数点。
这适用于具有简单正则表达式的普通数字(8.480 或 8.487),例如 ^(\d+)(\.)(\d+)$
不过,我们也有如下数字组合:1.240x899x987 或 987x1.048x987。部分或全部数字可能包含也可能不包含小数点。我可以通过使用可选组来搜索数字:^(\d+)(\.?)(\d+)(x)(\d+)(\.?)(\d+)(x)(\d+)(\.?)(\d+)$
我在使用带编号的反向引用替换这些字符串时遇到了问题。 如果可选组不为空,则它采用编号引用,并且 $1\s$3$4 返回 1 240x。但是,如果该组为空,则反向引用编号全部更改。
有没有办法在正则表达式中检查 null(如果不是 null 则)?所以我可以说'如果可选组不为空,用空格替换它'? 简而言之,我需要一种方法在单个正则表达式中将 1.287x989x150 和 987x1.048x987 和 987x313x1.487 更改为空格而不是点十进制?这甚至可能吗?
目前,我已将这三种情况拆分为单独的 javascript 中的搜索和替换 GREP,以非贪婪方式(匹配这三种情况的确切模式),但如果可能的话,if 子句将整洁得多。
亲切的问候
【问题讨论】:
-
我认为您不需要将可选部分放在捕获组中。您可以简单地将所有点替换为空格,我认为这根本不是正则表达式任务。
-
你需要字符串的开头和结尾吗?通常 (\d)\.(\d) 和 $1 $2 作为替换将替换所有点
-
如果我不捕获组中的点,我将如何用空格 (\s) 替换它? $1\s$2 仅在有点时有效;如果不是,它用空格分隔数字?
标签: regex backreference