Теперь у меня путь к папке будет содержать имя таблицы базы данных и идентификатор, похожий на:
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
* / (\ W + (?: / \ D +) {4}). * +1009 *
Но я хочу знать, может ли какая-либо функция, предоставляемая регулярным выражением, завершить ее за один шаг? Я пробовал эти способы:
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
* /.? (Р \ W +?) (?:? / (Р \ д +)) {4}
* / (\ W +).? (?: / (\ D +)) {4} * * 1 021
Есть еще что-нибудь? Или я должен использовать скрипт Python выше? Я надеюсь, что результат будет {'table_name': 'TableName', 'id': '000123456789'}
или ('TableName', '000123456789')
, по крайней мере ('TableName', '000', '123', '456', '789')
.