用正则表达式获取错误的数据

时间:2018-11-21 23:43:27

标签: python regex python-3.x parsing

我在这里面临一个问题。 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

我需要将字符串作为正则表达式,并带有逗号和值:

FMC2H-OHC-100018-00, 2

我的正则表达式错了吗?逗号和值发生了什么?

ROW值 这是转换为字符串的行值,从我的数据库中检索的数据还包括括号和引号:

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

2 个答案:

答案 0 :(得分:1)

您的问题是您没有在字符组中包括'。因此,此正则表达式匹配FMC2H-OHC-100018-00, 2,但不能同时匹配。 re.search在找到第一个匹配项后也停止搜索。因此,如果您只想要第一个比赛,请继续:

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

我将A-Za-z0-9更改为\w的地方,因为它更短且更易读。如果您想要一个匹配所有元素的列表,请继续:

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

答案 1 :(得分:1)

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

如果这是正确的,那么您可以避免将它们转换为字符串,然后尝试使用正则表达式进行解析,因为您可以通过使用相对简单的内置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