匹配每次出现的点,直到单个冒号为止

时间:2019-03-07 21:19:47

标签: regex

采用此字符串

bob.ted.dave.allan :: james.fred:hello.dave

我需要用替换每次出现的,直到我碰到一个单数“:”,而不是停在命名空间“ ::”上,而只是停在“:”上

因此在上面的字符串中,最终结果将是 bob#ted#dave#allan :: james#fred:hello.dave

当前,我有[。]匹配字符串中的所有点,但无法使其锚定在单个“:”上

3 个答案:

答案 0 :(得分:1)

如果您想要一个纯正则表达式解决方案,则只能使用可变宽度的后向模式来完成,只有少数正则表达式引擎支持这种模式:

allprojects {
    repositories {
        maven { url 'https://maven.google.com' }
        google()
        maven { url "https://jitpack.io" }
        jcenter()
    }
}

演示:https://de.wordpress.org/plugins/woocommerce-auto-added-coupons/

或者如果总是会有一个冒号,则可以改用正向超前模式:

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

演示:https://regex101.com/r/Crq49C/2

答案 1 :(得分:0)

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

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

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

演示:https://regex101.com/r/xDfstu/1

答案 2 :(得分:0)

我只想停在一个.上,然后停下来,直到看到一个正好: [.](?=.*:{1}) 将工作。 如果一行上有多个:,则此操作无效。