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

时间:2017-01-05 14:15:44

标签: 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的长度至少为一个字符。
  • 或者更简单地说,它遵循*[0-9]{1,4}\.[0-9]{1,3}\.*
  • 的正则表达式格式
  • 该字符串可能包含多个实例,其中某个部分遵循此格式,我希望按照此格式查找并替换每个实例,并将其余文本保留为找到。

我想将其转换为"SomeText A123B456.Thing SomeMoreText"格式的字符串,其中:

  • A(常数)已在123
  • 之前插入
  • B(常数)已在456
  • 之前插入
  • 所有积分.已被删除
  • Thing.456之后SomeMoreText
  • 之前的内容
  • 文本的其余部分(包括空格)已被保留。

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

所以基本上删除第一个点?

<sellers-upcoming-auctions *ngIf="auction" [sellerid]="auction.SellerUserId" take="4"></sellers-upcoming-auctions>

输出import re str = "SomeText A123.B456.Thing SomeMoreText" print(re.sub("\.", "", str, 1))

答案 1 :(得分:0)

使用捕获群组获取SomeText123456ThingSomeMoreText

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