다음 파일 이름 형식이 있습니다.
2020-01-05-ABC1111_001.jpg
2020_02_06_B444444_MN_004.jpg
2020_03_20_KUKU44223222-STAFF_005.jpg
2020-04-03-LULU4444211-MN_018.jpg
대부분 (99 %)의 파일은 다음 형식입니다.
2020_04_03_LULU4444211_018.jpg
그리고 나는 rsplit("_", 2)
필요한 것을 사용 하고 얻습니다.
첫 번째 부분은 날짜이고 두 번째 부분은 ID, MN 또는 STAFF, 페이지 번호입니다.
어떻게 든 날짜, ID 및 페이지로 분할하기 위해 좋은 정규식 또는 분할 함수를 빌드하는 방법은 무엇입니까?
위의 모든 예에서 다음을 얻고 싶습니다.
{
"2020-01-05-ABC1111_001.jpg": {"date": 2020-01-05, "id": ABC1111, "page_num": 1},
"2020_02_06_B444444_MN_004.jpg": {"date": 2020_02_06, "id": B444444, "page_num": 4},
"2020_03_20_KUKU44223222-STAFF_005.jpg": {"date": 2020_03_20, "id": KUKU44223222, "page_num": 5},
"2020-04-03-LULU4444211-MN_018.jpg": {"date": 2020-04-03, "id": LULU4444211, "page_num": 18}
}
나는 시도했지만 rsplit
주석 옵션 + Spacy NER 모델이 있다는 것을 알고 있지만 더 간단하게 수행하는 다른 방법이 있습니까?
다음과 같은 코드를 사용할 수 있습니다.
import re
strings = ['2020-01-05-ABC1111_001.jpg','2020_02_06_B444444_MN_004.jpg','2020_03_20_KUKU44223222-STAFF_005.jpg','2020-04-03-LULU4444211-MN_018.jpg']
rx = re.compile(r'(?P<date>\d{4}[-_]\d{2}[-_]\d{2})[-_](?P<id>[^_-]+)(?:[_-](?:MN|STAFF))?[_-](?P<page_num>\d+)')
d = {}
for s in strings:
m = rx.search(s)
if m:
d[s] = m.groupdict()
print(d)
참고 항목 파이썬 데모를 산출
{'2020-01-05-ABC1111_001.jpg': {'date': '2020-01-05', 'id': 'ABC1111', 'page_num': '001'}, '2020_02_06_B444444_MN_004.jpg': {'date': '2020_02_06', 'id': 'B444444', 'page_num': '004'}, '2020_03_20_KUKU44223222-STAFF_005.jpg': {'date': '2020_03_20', 'id': 'KUKU44223222', 'page_num': '005'}, '2020-04-03-LULU4444211-MN_018.jpg': {'date': '2020-04-03', 'id': 'LULU4444211', 'page_num': '018'}}
사용 된 정규식에는 이름이 지정된 캡처 링 그룹이 포함되어 있으므로 .groupdict()
일치 항목이 발견 된 후 액세스 할 수 있습니다.
(?P<date>\d{4}[-_]\d{2}[-_]\d{2})[-_](?P<id>[^_-]+)(?:[_-](?:MN|STAFF))?[_-](?P<page_num>\d+)
regex 데모를 참조하십시오 .
정규식 세부 정보
(?P<date>\d{4}[-_]\d{2}[-_]\d{2})
-그룹 "날짜": 4 자리 _
또는 -
, 2 자리 _
또는 -
다시 2 자리[-_]
-하이픈 또는 밑줄(?P<id>[^_-]+)
-그룹 "id": -
및 이외의 문자 1 개 이상_
(?:[_-](?:MN|STAFF))?
- 선택적인 비 - 포착 기 매칭 -
이나 _
후 MN
또는STAFF
[_-]
- -
또는_
(?P<page_num>\d+)
-그룹 "페이지 _ 번호": 1 자리 이상.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다