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

2024-04-25 05:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,模式文本就像(1A0IA:0.42722,1AYLA:0.47152)。我想用(1A0IA,1AYLA)替换它。你知道吗

我知道我可以这样做:

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

expression 1 : reduced_text = re.sub(r':\d+\.\d+\,',r',',text) 
output : (1A0IA,1AYLA:0.47152)
expression 2 : reduced_text = re.sub(r':\d+\.\d+\)',r')',reduced_text) 
output : (1A0IA,1AYLA)

确切地说,我只想在(ID:float,ID:float)中替换模式:float,,但是存在一些包含:float,的文本,但在这种字符串中不存在:(ID:float,ID:float)。你知道吗

有没有一个表达式可以这样做?你知道吗

(string1:0.42722,string2:0.47152) -> (string1,string2)

第一个.{5}string 1;第二个.{5}string 2

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

Tags: 文件字符串text文本reidoutputstring
3条回答

看看这个:

import re
s = "(1A0IA:0.42722,1AYLA:0.47152)"
r = "([\d\w]{5}):[\d\.]+(,|\))"
re.sub(r, r'\1\2', s)
# '(1A0IA, 1AYLA)'

您要查找的是搜索组(例如参见Named Capturing Groups)。你知道吗

有了这些,你可以做如下的事情来获得你的身份证。你知道吗

re.findall('(?P<id1>.{5}):[\d\.]+,(?P<id2>.{5}):[\d\.]+', text)

实际上不需要命名捕获组,因此(.{5})...在这里就足够了。你知道吗

更简单的正则表达式:

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

相关问题 更多 >