我在这里面临一个问题。 Python版本3.7。
https://regex101.com/r/WVxEKM/3
正如您在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)
答案 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