匹配所有出现的点,并在字符串中的单词之后用连字符替换

时间:2019-03-11 17:17:31

标签: python regex

采用此字符串

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

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

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

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

我在后面使用正向后缀,该字符串正好要开始用连字符替换点,但是之后可以匹配点。

(?<=follow\(')

3 个答案:

答案 0 :(得分: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(".","-")用前缀字符串(follow('java-coding-language_v1')中的-代替。
  • version[0:version.find(",")].replace(".","-")+version[version.find(","):])附加后缀(剩余的)字符串(follow('java-coding-language_v1','3.2.4')

答案 1 :(得分:0)

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

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')

答案 2 :(得分:0)

如果您要使用正则表达式,则先行查找应该是 last 部分,而不是第一部分,这样可以防止 inside 匹配最后(...)个序列:

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

“只要可以在字符串末尾看到,'...'),就匹配任何常规字符”

不需要“匹配组”逻辑,只需匹配.,用_替换即可。

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