Regex 匹配每个出现的点,直到出现一个冒号
拿这根绳子 鲍勃.泰德.戴夫.艾伦:詹姆斯.弗雷德:你好,戴夫 我需要将每次出现的替换为#,直到我遇到一个单数“:”而不是停在名称空间“:”而只是“:” 因此,在上面的字符串中,最终结果将是 鲍勃·泰德·戴夫·艾伦:詹姆斯·弗雷德:你好,戴夫Regex 匹配每个出现的点,直到出现一个冒号,regex,Regex,拿这根绳子 鲍勃.泰德.戴夫.艾伦:詹姆斯.弗雷德:你好,戴夫 我需要将每次出现的替换为#,直到我遇到一个单数“:”而不是停在名称空间“:”而只是“:” 因此,在上面的字符串中,最终结果将是 鲍勃·泰德·戴夫·艾伦:詹姆斯·弗雷德:你好,戴夫 目前,我有[.]匹配字符串中的所有点,但无法将其锚定在单个“:”您可以捕获整个字符串,直到单个:与一个简单的字符集匹配: [\w\.:]+(?::{1}) 然后对捕获的字符串中的所有进行替换 演示:如果您想要一个纯正则表达式解决方案,这只能通过一个可变宽度
目前,我有[.]匹配字符串中的所有点,但无法将其锚定在单个“:”您可以捕获整个字符串,直到单个
:
与一个简单的字符集匹配:
[\w\.:]+(?::{1})
然后对捕获的字符串中的所有
进行替换
演示:如果您想要一个纯正则表达式解决方案,这只能通过一个可变宽度的查找模式来完成,只有少数正则表达式引擎支持该模式:
(?<!(?<!:):(?!:).*)\.
(?
演示:
或者,如果始终存在冒号,则可以使用正向先行模式:
\.(?=.*(?<!:):(?!:))
\.(?=.*?
演示:只锚定在一个
上,直到看到一个才停止:
我想
[.](?=.:{1})
会有用的。
如果一行中有多个:
,则此操作无效