Python 如何用给定的原始字符串和返回字符串的关系替换字符串?

Python 如何用给定的原始字符串和返回字符串的关系替换字符串?,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个文件,模式文本类似于(1A0IA:0.42722,1AYLA:0.47152)。我想用(1A0IA,1AYLA)替换它 我知道我可以这样做: text是字符串包含(1A0IA:0.42722,1AYLA:0.47152) 确切地说,我想在(ID:float,ID:float)中替换模式:float,,但存在一些包含:float,的文本,但不在此类字符串中:(ID:float,ID:float) 是否存在可以执行以下操作的表达式 (string1:0.42722,string2:0.471

我有一个文件,模式文本类似于
(1A0IA:0.42722,1AYLA:0.47152)
。我想用
(1A0IA,1AYLA)
替换它

我知道我可以这样做:

text
是字符串包含
(1A0IA:0.42722,1AYLA:0.47152)

确切地说,我想在
(ID:float,ID:float)
中替换模式
:float,
,但存在一些包含
:float,
的文本,但不在此类字符串中:
(ID:float,ID:float)

是否存在可以执行以下操作的表达式

(string1:0.42722,string2:0.47152) -> (string1,string2)
第一个
{5}
字符串1
;第二个
{5}
字符串2

reduced_text = re.sub(r'\(.{5}:\d+\.\d+\,.{5}:\d+\.\d+\)',r'\(.{5}\,.{5}\)',text)

您要查找的是搜索组(参见示例)

有了这些,您可以执行如下操作来获取您的ID

re.findall('(?P.{5}):[\d\.]+,(?P.{5}):[\d\.]+',text)
实际上,没有必要命名捕获组,因此
(..{5})..
在这里就足够了。

看看这个:

import re
s = "(1A0IA:0.42722,1AYLA:0.47152)"
r = "([\d\w]{5}):[\d\.]+(,|\))"
re.sub(r, r'\1\2', s)
# '(1A0IA, 1AYLA)'
更简单的正则表达式:

>>> import re
>>> '(' + ','.join(re.findall(r'[,\(]([^:]*):', s)) + ')'
'(1A0IA,1AYLA)'
>>> import re
>>> '(' + ','.join(re.findall(r'[,\(]([^:]*):', s)) + ')'
'(1A0IA,1AYLA)'