Regex 匹配每个出现的点,直到出现一个冒号

Regex 匹配每个出现的点,直到出现一个冒号,regex,Regex,拿这根绳子 鲍勃.泰德.戴夫.艾伦:詹姆斯.弗雷德:你好,戴夫 我需要将每次出现的替换为#,直到我遇到一个单数“:”而不是停在名称空间“:”而只是“:” 因此,在上面的字符串中,最终结果将是 鲍勃·泰德·戴夫·艾伦:詹姆斯·弗雷德:你好,戴夫 目前,我有[.]匹配字符串中的所有点,但无法将其锚定在单个“:”您可以捕获整个字符串,直到单个:与一个简单的字符集匹配: [\w\.:]+(?::{1}) 然后对捕获的字符串中的所有进行替换 演示:如果您想要一个纯正则表达式解决方案,这只能通过一个可变宽度

拿这根绳子

鲍勃.泰德.戴夫.艾伦:詹姆斯.弗雷德:你好,戴夫

我需要将每次出现的替换为#,直到我遇到一个单数“:”而不是停在名称空间“:”而只是“:”

因此,在上面的字符串中,最终结果将是 鲍勃·泰德·戴夫·艾伦:詹姆斯·弗雷德:你好,戴夫


目前,我有[.]匹配字符串中的所有点,但无法将其锚定在单个“:”

您可以捕获整个字符串,直到单个
与一个简单的字符集匹配:

[\w\.:]+(?::{1})

然后对捕获的字符串中的所有
进行替换


演示:

如果您想要一个纯正则表达式解决方案,这只能通过一个可变宽度的查找模式来完成,只有少数正则表达式引擎支持该模式:

(?<!(?<!:):(?!:).*)\.
(?
演示:

或者,如果始终存在冒号,则可以使用正向先行模式:

\.(?=.*(?<!:):(?!:))
\.(?=.*?

演示:

只锚定在一个
上,直到看到一个
才停止:
我想
[.](?=.:{1})
会有用的。 如果一行中有多个
,则此操作无效