我正在尝试使用re
替换字符串中的某些值。基本上,用 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}
答案 0 :(得分:2)
您不想替换{}
或,
,因此您可以使用positive lookaheads and lookbehinds来确保int为:
{
之后(?<={)
}
或,
之前:(?=}|,)
如果您只想替换整个字符串中的第一个出现,可以将sub
的第4个参数设置为1.在这种情况下,{3}{3}
将转换为{{1 }}。更新:你不想要它。 :)
{1}{3}
以下是一些测试:
import re
pattern = '(?<={)\d+(?=}|,)'
string = 'ab{3,16}'
print re.sub(pattern, '1', string)
答案 1 :(得分:2)
当使用正则表达式替换时,将替换整个匹配的字符串。当您匹配整个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
答案 2 :(得分:0)
如果您的模式始终采用指定的格式(如示例所示),这就足够了:
print re.sub(r'{\d+', '{1', string, count=1)