繁体   English   中英

使用re.sub()替换字符串的某些部分

[英]Using re.sub() to replace some part of a string

背景

我正在尝试使用re替换字符串中的某些值。 本质上,将第一个检测到的int (以特定模式 )替换为1

例子:

{1}        -> {1}
{2}        -> {1}
{3,}       -> {1,}
{3,16}     -> {1,16}
ab{3,16}   -> ab{1,16}
5a4b{3,16} -> 5a4b{1,16}
{1,4}      -> {1,4}

尝试

import re

pattern = '.*{(\d+)}|{(\d+),}|{(\d+),\d+}'
string = 'ab{3,16}'
print re.sub(pattern, '1', string)

但是我得到ab1而不是ab{1,16}

您不想替换{},因此可以使用正向前行和后向行来确保int为:

  • {加上: (?<={)
  • }或a之前,并带有: (?=}|,)

如果只想替换整个字符串中的第一个匹配项,则可以将sub的第4个参数设置为1。在这种情况下, {3}{3}将转换为{1}{3} 更新:您不想要它。 :)

import re

pattern = '(?<={)\d+(?=}|,)'
string = 'ab{3,16}'
print re.sub(pattern, '1', string)

这是一些测试:

import re

def replace_first_int(string):
  pattern = '(?<={)\d+(?=}|,)'
  return re.sub(pattern, '1', string)

print replace_first_int('{1}')
# {1}
print replace_first_int('{2}')
# {1}
print replace_first_int('{3,}')
# {1,}
print replace_first_int('{3')
# {3
print replace_first_int('{3,16}')
# {1,16}
print replace_first_int('{1,4}')
# {1,4}
print replace_first_int('{3}{3}')
# {1}{1}
print replace_first_int('ab5')
# ab5
print replace_first_int('5a4b{3,16}')
# 5a4b{1,16}

当使用正则表达式进行替换时,整个匹配的字符串将被替换。 当您匹配整个{1,16} ,它将相应地替换为1

对于您的样本(?<=\\{)\\d+将作为模式,然后可以替换为1 ,例如

import re

pattern = '(?<={)\d+'
string = 'ab{3,16}'
print re.sub(pattern, '1', string)

如果您的模式始终采用指定的格式(如您的示例中所示),那么就足够了:

print re.sub(r'{\d+', '{1', string, count=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM