Python替换匹配正则表达式格式的字符串

Python替换匹配正则表达式格式的字符串,python,regex,string,formatting,Python,Regex,String,Formatting,在python中,我想执行一个奇特的查找和替换操作。我不太熟悉正则表达式,但我认为使用re.sub和一些奇特的分组是可能的。我怀疑这是一条单行线,但我还没弄明白 我有一个字符串,格式为“SomeText 123.456.Thing SomeMoreText”,其中: “SomeText”,“SomeMoreText”可能存在,也可能不存在 123是长度介于1和4(0到0000)之间的整数 456是长度介于1和3(0到000)之间的整数,Thing的长度至少为一个字符 或者更简单地说,它遵循的正

在python中,我想执行一个奇特的查找和替换操作。我不太熟悉正则表达式,但我认为使用
re.sub
和一些奇特的分组是可能的。我怀疑这是一条单行线,但我还没弄明白

我有一个字符串,格式为“SomeText 123.456.Thing SomeMoreText”,其中:

  • “SomeText”
    “SomeMoreText”
    可能存在,也可能不存在
  • 123
    是长度介于1和4(0到0000)之间的整数
  • 456
    是长度介于1和3(0到000)之间的整数,
    Thing
    的长度至少为一个字符
  • 或者更简单地说,它遵循的正则表达式格式是
    *[0-9]{1,4}\.[0-9]{1,3}\.
  • 字符串可能包含多个实例,其中一个部分遵循此格式,我希望查找并替换遵循此格式的每个实例,并保留其余文本
我想把它转换成一个字符串,格式为“SomeText A123B456.Thing SomeMoreText”,其中:

  • 在123之前插入了一个
    (常数)
  • B
    (常数)已插入456之前
  • 已删除所有点
  • 东西
    是在
    .456
    之后但在
    其他文本
  • 其余文本(包括空格)已保留

非常感谢。

那么基本上去掉第一个点

import re

str = "SomeText A123.B456.Thing SomeMoreText"

print(re.sub("\.", "", str, 1))

输出
SomeText A123B456。Thing SomeMoreText
使用捕获组获取
SomeText
123
456
Thing
SomeMoreText

re.sub(r'(.*) (\d{1,4})\.(\d{1,3})\.(.+) (.*)', r'\1 A\2B\3.\4 \5', "SomeText 123.456.Thing SomeMoreText")
输出:

'SomeText A123B456.Thing SomeMoreText'
编辑:上面对空间做了一些假设。你也可以试试

re.sub(r'(.*?)(\d+).(\d+).(.*)', r'\1A\2B\3.\4', "SomeText 123.456.Thing SomeMoreText")

那么…到目前为止,你尝试过做什么?你介意分享你的最新代码吗?太棒了,非常感谢。我也能看出我在分组上的错误。