Python의 re 모듈로 정규식을 작성할 때, 고정된 패턴 대신 변수 값을 패턴에 동적으로 삽입해야 하는 경우가 자주 있습니다. 이럴 때는 간단히 문자열 연결(string concatenation)을 사용해 패턴 문자열을 만들면 됩니다.
다만 한 가지 주의할 점이 있습니다. 변수에 담기는 값에는 특수 문자나 메타 문자가 포함되어서는 안 되며, 변수 자체가 별도의 정규식 문법을 담지 않는 단순한 문자열이어야 합니다.
예제 코드
아래 예제는 문자열 연결을 통해 정규식 패턴에 변수를 삽입하는 기본적인 방법을 보여줍니다.
import re
s = 'I love books'
var_name = 'love'
result = re.search('(.+)' + var_name + '(.+)', s)
print(result)
var_name = 'hate'
s2 = 'I hate books'
result = re.search('(.+)' + var_name + '(.+)', s2)
print(result)실행 결과
위 코드를 실행하면 각 검색이 성공했음을 나타내는 매치 객체(Match Object)가 출력됩니다.
<re.Match object; span=(0, 13), match='I love books'>
<re.Match object; span=(0, 13), match='I hate books'>더 알아두면 좋은 팁
f-string으로 더 깔끔하게 작성하기
Python 3.6 이상에서는 f-string을 활용하면 패턴 조합이 훨씬 읽기 쉬워집니다.
result = re.search(f'(.+){var_name}(.+)', s)변수에 특수 문자가 포함될 가능성이 있다면
변수 값에 정규식 특수 문자(예: ., *, ( 등)가 들어갈 수 있다면 re.escape()로 이스케이프 처리하는 것이 안전합니다.
import re
pattern = re.escape(var_name)
result = re.search(f'(.+){pattern}(.+)', s)매치 결과 확인하기
매치 객체에서 실제로 매칭된 문자열을 꺼내려면 group() 메서드를 사용합니다.
if result:
print(result.group()) # 전체 매칭 문자열
print(result.group(1)) # 첫 번째 그룹
print(result.group(2)) # 두 번째 그룹