首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找并替换数字(可以有小数点) ids

查找并替换数字(可以有小数点) ids
EN

Stack Overflow用户
提问于 2022-04-10 06:13:33
回答 1查看 94关注 0票数 2

我有一堆数字I,我需要用新的数字I编号。

代码语言:javascript
复制
id="12.03"

id="23.343.Fdf--"

id="12-B.fdas7232"

id="12."

id="1."

id="1.-2"

id="2.02-R.-vdfs--erev-j"

id="48-34JJf"

id="5.01-G.f"

使用此正则表达式:

代码语言:javascript
复制
 id="[1-9]\d*(\.\d+)?

https://regexr.com/我能够得到正确的匹配

但是,当我运行python脚本时,我认为它与捕获返回太多值的组有关。

以下是打印输出的两个示例:

(id=“5.01”、“id=”、“5.01”、“.01”)(“id=”48、“id=”、“48”)

我不知道如何阻止它返回上面两个例子中的第四个值'.01‘或'’。

我得到了以下错误:值太多,无法解压(预期的3)

我尝试了几个不同的Regex变体,试图让它返回单个字符串,比如添加额外的括号、^和$来标记字符串的开始和结束,等等。

代码语言:javascript
复制
    PID_REPLACEMENTS = {
    "48":'9',
    "23.343":'8',
    "12.03":'7',
    "12":'6',
    "5.01":'5',
    "2.02":'4',
    "1":'3.08'}

    my_text = substitute_oldid_index(my_text)

def substitute_oldid_index(my_text):
    return substitute_newid(r"""((?P<pre> id=")(?P<post>[1-9]\d*(\.\d+)?))""", my_text)


def substitute_newid (findallnewid_regex, my_text):
    data_oldids = re.findall(findallnewid_regex, my_text, re.I)

    print(data_oldids)

    for combined, pre, post in data_oldids:
    if post.title() not in PID_REPLACEMENTS:
        continue

    my_text = re.sub(combined, "{}{}".format(pre, PID_REPLACEMENTS[post.title()]), my_text)

    return my_text

是否有更好的方法来查找数字ID(可能包含小数点和应该保持静态的附加句点或文本),并用新的数字ID(可能包含小数点,也可能不包含小数点)替换它们?我想我们想要用相反的时间顺序来做,这样就不会发现更低的数字了?

有什么方法可以修复我的regex和脚本来实现这个目标吗?

作为后续问题,我在电子表格中有一堆需要转换为新ID号的范围。

例1: 5.01-48;151.01-168;224-382;415-510;218-249

例2: 128-211;257-281;386-401

有没有办法搜索这些数字并用一个新的号码替换它们?

例如,查找5.01并将其替换为上面字典中的5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-10 23:25:30

我觉得你在赛前和赛后都让这件事变得更难了。为什么不直接查找数字,可选地后面跟着一个点和数字,如果该集合在您的列表中,替换它?这样做是为了:

代码语言:javascript
复制
import re

PID_REPLACEMENTS = {
"48":'9',
"23.343":'8',
"12.03":'7',
"12":'6',
"5.01":'5',
"2.02":'4',
"1.":'3.08'}

sample = """
id="12.03"         12.03
id="23.343.Fdf--"  23.343
id="12-B.fdas7232"
id="12."           12.
id="1."            1.
id="1.-2"
id="2.02-R.-vdfs--erev-j"
id="48-34JJf"
id="5.01-G.f"      5.01
id="[1-9]\d*(\.\d+)?
EXAMPLE 1: 5.01-48; 151.01-168; 224-382; 415-510; 218-249
EXAMPLE 2: 128-211; 257-281; 386-401
"""

def subst(m):
    m = m.group(0)
    return PID_REPLACEMENTS.get(m,m)

def substitute_newid(my_text):
    return re.sub('(?<=id=")\d+(\.\d*)?', subst, my_text)

print( substitute_newid(sample) )
"""

def subst(m):
    m = m.group(0)
    return PID_REPLACEMENTS.get(m,m)

def substitute_newid(my_text):
    return re.sub('(?<=id=")\d+(\.\d*)?', subst, my_text)

print( substitute_newid(sample) )

输出:

代码语言:javascript
复制
id="7"         12.03
id="8.Fdf--"  23.343
id="6-B.fdas7232"
id="12."           12.
id="3.08"            1.
id="3.08-2"
id="4-R.-vdfs--erev-j"
id="9-34JJf"
id="5-G.f"      5.01
id="[1-9]\d*(\.\d+)?
EXAMPLE 1: 5.01-48; 151.01-168; 224-382; 415-510; 218-249
EXAMPLE 2: 128-211; 257-281; 386-401
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71814203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档