【问题标题】:Match all occurrences of dot and replace with hyphens after word in string匹配所有出现的点并用字符串中单词后的连字符替换
【发布时间】:2019-03-11 17:17:31
【问题描述】:

取这个字符串

version = follow('java.coding.language_v1','3.2.4')

follow这个词之后,我想在逗号之前的所有内容上用连字符替换所有点,有许多字符串将遵循相同的模式,但逗号之前的点数会有所不同:

示例 转换后的字符串如下所示:

version = follow('java-coding-language_v1','3.2.4')

我使用了一个正向的lookbehind,它到达了字符串中的点,我想开始用连字符替换点,但之后可以匹配点。

(?<=follow\(')

【问题讨论】:

  • 我不明白你的字符串。其实怎么样?

标签: python regex


【解决方案1】:
version = "follow('java.coding.language_v1','3.2.4')"
print (version[0:version.find(",")].replace(".","-")+version[version.find(","):])
  • version[0:version.find(",")]获取字符串的前缀,直到它以“,”结尾(follow('java.coding.language_v1'
  • version[0:version.find(",")].replace(".","-") 将前缀字符串中的 .'s 替换为 -'s (follow('java-coding-language_v1')
  • version[0:version.find(",")].replace(".","-")+version[version.find(","):]) 附加后缀(剩余)字符串 (follow('java-coding-language_v1','3.2.4'))

【讨论】:

    【解决方案2】:

    如果你想使用正则表达式,前瞻应该寻找 last 部分,而不是第一部分,这样它可以防止匹配 inside最后(...)序列:

    \.(?=.*,'.*'\))

    “只要我仍然可以看到字符串末尾的,'...'),匹配任何常规句点字符”

    不需要“匹配组”逻辑,您只匹配了.,替换为_

    https://regex101.com/r/a6QiDZ/4/

    【讨论】:

      【解决方案3】:

      您不需要正则表达式。拆分引号,替换所需的拆分并加入它们:

      version = "follow('java.coding.language_v1','3.2.4')"
      
      splits = version.split("'", 2)
      version = "'".join([splits[0], splits[1].replace('.', '-'), splits[2]])
      
      # follow(java-coding-language_v1,'3.2.4')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-28
        • 2016-09-26
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2012-07-18
        • 2011-03-26
        相关资源
        最近更新 更多