现在,我有一个文件夹路径,其中将包含数据库表名称和ID,如下所示:
path = '/something/else/TableName/000/123/456/789'
我当然可以匹配TableName/000/123/456/789
,然后用python脚本分割它们。
import re
matched = re.findall(r'.*?/(\w+(?:/\d+){4})', path)[0] # TableName/000/123/456/789
split_text = matched.split('/') # ['TableName', '000', '123', '456', '789']
table_name = split_text[0] # 'TableName'
id = int(''.join(split_text[1:])) # 123456789
但是我想知道,正则表达式提供的任何功能是否可以一步完成?我已经尝试过以下方法:
re.match(r'.*?/(?P<table_name>\w+)(?:/(?P<id>\d+)){4}', path).groupdict() # {'table_name': 'TableName', 'id': '789'}
re.split(r'.*?/(\w+)(?:/(\d+)){4}', path) # ['', 'TableName', '789', '']
re.sub(r'(.*?/)\w+(?:(/)\d+){4}', '', path) # '', full string has been replaced
还有其他地方吗?还是我必须使用上面的python脚本?我希望结果是{'table_name': 'TableName', 'id': '000123456789'}
或('TableName', '000123456789')
,至少是('TableName', '000', '123', '456', '789')
。
答案 0 :(得分:1)
最简单的方法是避免使用量词:
re.findall('(\w+)\/(\d+)\/(\d+)\/(\d+)\/(\d+)', path)
[('TableName', '000', '123', '456', '789')]
答案 1 :(得分:0)
最简单的方法是扩展分组。
>>> match=re.search(r'.*?/(\w+)(?:/(\d+))(?:/(\d+))(?:/(\d+))(?:/(\d+))',a)
>>> match.groups()
('TableName', '000', '123', '456', '789')