编辑:这个问题与 Oracle 的正则表达式 (POSIX ERE) 实现有关,它不支持“lookaheads”
我需要用逗号分隔一串字符,但是,模式不一致,我不确定是否可以使用正则表达式来完成此操作。
语料库:1710ABCD.131711ABCD.431711ABCD.41711ABCD.4041711ABCD.25
该模式基本上是 4 位数字,后跟 4 个字符,后跟一个点,然后是 1、2 或 3 位数字!为了使上面的字符串更清楚,它看起来像用空格分隔 1710ABCD.13 1711ABCD.43 1711ABCD.4 1711ABCD.404 1711ABCD.25
因此替换操作的输出应如下所示:
1710ABCD.13,1711ABCD.43,1711ABCD.4,1711ABCD.404,1711ABCD.25
我能够使用此正则表达式来匹配模式:
(\d{4}\w{4}\.\d{1,3})
它确实插入了一个逗号,但在点后面的第三个数字之后(错误,应该在第二个数字之后),但我无法让它在正确的位置和全局范围内执行此操作。
这是 fiddle 的链接 https://regex101.com/r/qQ2dE4/329
最佳答案
您所需要的只是在正则表达式末尾进行前瞻,以便贪婪的 \d{1,3}
回溯,直到后面跟着 4 位数字(表示下一个子字符串的开始) ):
(\d{4}\w{4}\.\d{1,3})(?=\d{4})
^^^^^^^^^
关于正则表达式:用不一致的模式分隔字符串 (Oracle) (POSIX ERE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378701/