使用regex获取错误数据

2024-09-28 23:40:38 发布

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

我在这里面临一个问题。Python 3.7版。你知道吗

https://regex101.com/r/WVxEKM/3

screenshot of regex101 web page

正如您在regex站点上看到的,我的regex工作得很好,但是,当我尝试用python读取字符串时,我只得到第一部分,也就是说,逗号后没有值。你知道吗

这是我的密码:

part_number = str(row)
partn = re.search(r"([a-zA-Z0-9 ,-]+)", part_number)
print(partn.group(0))

这就是partn.group(0)正在打印的内容:

FMC2H-OHC-100018-00

我需要以regex形式获取字符串,带有逗号和值:

FMC2H-OHC-100018-00, 2

是我的正则表达式错了吗?。逗号和值是怎么回事?你知道吗

行值 以下是转换为字符串的行值,从my db检索的数据还包括括号和引号:

('FMC2H-OHC-100018-00', 2)
('FMC2H-OHC-100027-00', 0)

Tags: 字符串httpscomnumber站点groupregex逗号
2条回答

你的问题是你没有在你的角色组中包含'。所以这个正则表达式匹配例如FMC2H-OHC-100018-00, 2,但不是两者都匹配。同时re.search在找到第一个匹配项后停止搜索。所以,如果你只想要第一场比赛,就选择:

re.search(r"([\w ',-]+)", part_number)

我把A-Za-z0-9改成了\w,因为它更短,可读性更强。如果您想要一个匹配所有元素的列表,请使用:

re.findall(r"([\w ',-]+)", part_number)

我不认为您需要将行值转换为字符串,然后尝试用正则表达式解析结果。线索是当您在更新中说“这里是转换为字符串的行值”时,这意味着它们最初是其他格式的,因为结果看起来它们实际上是两个值的tuple,一个字符串和一个整数。你知道吗

如果这是正确的,那么您可以避免将它们转换为字符串,然后尝试使用regex对其进行解析,因为您只需使用Python提供的相对简单的内置字符串格式化功能就可以获得所需的字符串。你知道吗

我的意思是:

# Raw row data retrieved from database.
rows = [('FMC2H-OHC-100018-00', 2),
        ('FMC2H-OHC-100027-00', 0),
        ('FMC2H-OHC-100033-00', 0),
        ('FMC2H-OHC-100032-00', 20),
        ('FMC2H-OHC-100017-00', 16)]

for row in rows:
    result = '{}, {}'.format(*row)  # Convert data in row to a formatted string.
    print(result)

输出:

FMC2H-OHC-100018-00, 2
FMC2H-OHC-100027-00, 0
FMC2H-OHC-100033-00, 0
FMC2H-OHC-100032-00, 20
FMC2H-OHC-100017-00, 16

相关问题 更多 >