Python替换匹配正则表达式格式的字符串
在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的长度至少为一个字符 或者更简单地说,它遵循的正
re.sub
和一些奇特的分组是可能的。我怀疑这是一条单行线,但我还没弄明白
我有一个字符串,格式为“SomeText 123.456.Thing SomeMoreText”,其中:
,“SomeText”
可能存在,也可能不存在“SomeMoreText”
是长度介于1和4(0到0000)之间的整数123
是长度介于1和3(0到000)之间的整数,456
的长度至少为一个字符Thing
- 或者更简单地说,它遵循的正则表达式格式是
*[0-9]{1,4}\.[0-9]{1,3}\.
- 字符串可能包含多个实例,其中一个部分遵循此格式,我希望查找并替换遵循此格式的每个实例,并保留其余文本
(常数)在123之前插入了一个
(常数)已插入456之前B
- 已删除所有点
是在东西
之后但在.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")
那么…到目前为止,你尝试过做什么?你介意分享你的最新代码吗?太棒了,非常感谢。我也能看出我在分组上的错误。