正则表达式:用不一致的模式分隔字符串 (Oracle) (POSIX ERE)

标签 regex regex-lookarounds regex-group

编辑:这个问题与 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})
                     ^^^^^^^^^

https://regex101.com/r/qQ2dE4/330

关于正则表达式:用不一致的模式分隔字符串 (Oracle) (POSIX ERE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378701/

相关文章:

python - 在 pandas 数据框中选择遵循特定模式的行

python - Lookahead 正则表达式无法找到相同的重叠匹配项

c#正则表达式问题

regex - 以任意顺序匹配多个组,中间有未知文本

regex - 使用正则表达式在字符串中精确匹配一次出现

Java 正则表达式不工作 - 为什么?

javascript - 正则表达式让前瞻功能适用于字符串中的每个单独单词

javascript - 在向前看之前只捕获最接近的匹配项

C# 正则表达式组麻烦

python - 如何概括这个正则表达式,以便它开始捕获字符串开头的子字符串或者后面跟着其他单词的子字符串?