s.split() vs. re.split(s)
s.split() vs. re.split(s)
import re, time, random
def random_string(_len):
letters = "ABC"
return "".join([letters[random.randint(0,len(letters)-1)] for i in range(_len) ])
r = random_string(2000000)
pattern = re.compile(r"A") # f'문자열' fstring # r'문자열' raw string
start = time.time()
# pattern.split(r)
re.split(pattern, r)
print("re.split : ", time.time() - start)
start = time.time()
r.split("A")
print("내장 split : ", time.time() - start)
re.split : 0.042563438415527344
내장 split : 0.028233766555786133
re의 split은 정규표현식 상태를 불러오는데 조금 더 리소스를 사용하는데 반해 내장 split은 단순히 문자열에서 검색만 하므로 내장 split이 속도면에서는 빠르다.
따라서 단순한 문자하나로 나눌 경우 re.split을 쓸 이유가 없다.
s = "One:two::t h r e e:::fourth field"
print(re.split(':+', s))
print(s.split(':'))
s = "One:two:2:t h r e e:3::fourth field"
print(re.split('[:\d]+',"One:two:2:t h r e e:3::fourth field"))
['One', 'two', 't h r e e', 'fourth field']
['One', 'two', '', 't h r e e', '', '', 'fourth field']
['One', 'two', 't h r e e', 'fourth field']
복잡한 문자열을 정규표현식으로 나누는데엔 re.split이 훨씬 유연하게 사용할 수 있다.
Reference
- stackoverflow: Python re.split() vs split()
댓글남기기