Pythhon 정규 표현식을 사용하여 임의의 문자열 그룹 추출/이름 지정 그룹 사용
9014 단어 Python
개시하다
정규 표현식 사용하셨나요?!!!
제가 마지막으로 사용한 게 한 달 전쯤이었죠.
필요할 때 오시면 열심히 쓰실 거예요.
이런 정규 표현식이지만 잘 사용하면 임의의 문자열을 추출할 수 있다는 느낌을 준다.
TLDL
문자열을 추출할 때 이름 그룹을 사용하십시오!
>> text = "environ/house-food/apple-pie02.fbx"
>> import re
>> reg_text = r'(?P<main>(chara|environ))/(?P<sub>[^-/]*)-?(?P<sub_sub>[^/]*)/(?P<filling>[^-]*)-pie'
>> match = re.search(reg_text, text)
>> print(match.groupdict())
{'main': 'environ', 'sub': 'house', 'sub_sub': 'food', 'filling': 'apple'}
정규 표현식의 기본
우선 정규 표현식에 대해 기본적이고 적당한 일치를 한다.
#! python3
import re
def main():
# NOTE: どうでもいいですけど、正規表現のサンプルでアップルパイってよく見かけますよね。
text = "environ/house-food/apple-pie02.fbx"
match_obj= re.search(r'pie', text)
if match_obj:
print("ヒットしたよ!")
else:
print("ヒットしないよ!")
if __name__ == '__main__':
main()
뭐, 그렇습니다.아주 간단하네요.만약 속도가 구한다면 시작이 일치할 때
re.match
에 사용하거나 교체하고 싶을 때re.sub
에 사용할 수 있다어쨌든 정규 표현식을 사용하는 것은 문제가 없을 것이다.1
그럼 앞의 문자열
pie
을 어떻게 추출합니까?나는 각양각색의 문자열을 삭제한 후에 꺼내고 싶다.
그런데 상대를 많이 얻었을 때는?예를 들어 단숨에
apple
,environ
와house
를 얻고 싶은 경우?이럴 때 사용할 수 있는 것은 단체다.
공식 문서를 읽어봅시다.
정규 표현식의 문법
(중략)
(...)
괄호로 묶인 정규 표현식과 일치하며 조합의 시작과 끝을 표시합니다.
그룹의 내용은 다음과 같습니다. 성냥을 실행한 후에 회수하거나, 이 문자열에서 나중에\number 특수 서열로 일치할 수 있습니다.
"('또는')"를 일치시키려면 (지원) 또는 문자 카테고리를 사용하여 [, [)]를 둘러쌉니다.
re-정규 표현식 작업 - Python 3.9.1 문서에 따라
...어떻게 쓰는지 모르겠어..
그래서 샘플을 꺼내 보겠습니다.
그룹 작업
#! python3
import re
def main():
text = "environ/house-food/apple-pie02.fbx"
match_obj= re.search(r'([^/-]*)-?pie)', text)
print(match_obj.groups())
if __name__ == '__main__':
main()
객체 일치
food
를 통해귀일화 정규 표현식과 관련된 문자열 목록을 얻을 수 있습니다.
따라서 상기
apple
에서 꺼내기match_obj.groups()
, text
와 environ
를 고려하여#! python3
import re
def main():
text = "environ/house-food/apple-pie02.fbx"
match = re.search(r'([^/-]*)/([^/-]*)-?([^/-]*)/([^/-]*)-?pie', text)
if match:
print(match.groups())
if __name__ == '__main__':
main()
그렇다면..잘 끝냈네요!
그런대로 편리한 편이야!
house
말고 food
이런 거 갖고 싶어요.정규 표현은 자주 사용하고
apple
필요한 부분만 있으면 된다고 생각합니다.그때가 바로 이 "이름이 있는 그룹"!
예와 같이 공식 문서를 읽어 보세요.
정규 표현식의 문법
(중략)
(?P
일반적인 괄호와 유사하지만, 이 조합이 일치하는 하위 문자열은 기호 그룹 이름name으로 접근할 수 있습니다.
그룹 이름은 유효한 Python 식별자여야 하며 각 그룹 이름은 정규 표현식에 한 번 정의되어야 합니다.
기호 그룹은 이름이 없는 것처럼 번호가 지정된 그룹입니다.
이름 지정 그룹 사용
뭐, 일단 쓰면 알 수 있는 정신으로 쓰자.
#! python3
import re
def main():
text = "environ/house-food/apple-pie02.fbx"
match = re.search(r'(?P<main>[^/-]*)/(?P<sub>[^/-]*)-?(?P<sub_sub>[^/-]*)/(?P<filling>[^/-]*)-?pie', text)
if match:
print(match.groupdict())
if __name__ == '__main__':
main()
객체 일치list
를 통해이름이 붙은 그룹 사전을 얻을 수 있습니다.
괜찮은 것 같아!
끝맺다
아무 생각도 못했어..
아주 편리하군요!
추기: 속도를 의식한다면 for환에서 같은 정규 표현식을 사용할 때 for 이외
dict
에서 사용하면 조금 빠르다. ↩ Reference
이 문제에 관하여(Pythhon 정규 표현식을 사용하여 임의의 문자열 그룹 추출/이름 지정 그룹 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takumi_akashiro/items/44412eb9db623d136bf1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)