주어진 문자열에서 10+1 정규식 패턴과 일치하는 모든 부분을 찾아야 하는 경우가 있습니다. 이때 파이썬에서 기본 제공되는 re 모듈을 활용하면 간단하게 해결할 수 있습니다.re.findall() 메서드란?re 모듈에는 findall()이라는 메서드가 있는데, 이 메서드는 정규식 패턴과 검색 대상 문자열을 인자로 받아 해당 패턴과 일치하는 모든 항목을 리스트 형태로 반환합니다. 즉, 문자열 내에 패턴이 몇 번 등장하더라도 전부 찾아낼 수 있습니다.예제 입력과 기대 출력예를 들어 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다
정규식(regex)을 사용해 문자열에서 최대 숫자 값을 추출하는 가장 간단한 방법은 다음 두 단계로 진행하는 것입니다.re 모듈을 활용해 문자열에 포함된 모든 숫자를 추출합니다.추출한 숫자들 중 최댓값을 찾습니다.예제 입력예를 들어 아래와 같은 입력 문자열이 있다고 가정해 보겠습니다.이 도시에는 121005명이 살고 있으며, 인근 도시에는 1587469명, 먼 곳의 도시에는 18775994명이 살고 있습니다.이 문자열에서 얻어야 하는 출력 결과는 다음과 같습니다.18775994정규식 패턴 이해하기여기서는 \d+ 정규식 패턴을 사용합
이 글에서 해결하려는 문제는 CamelCase(카멜케이스)로 작성된 문자열을 개별 단어로 분리하는 것입니다. 정규식을 활용하면 주어진 문자열에서 모든 대문자를 찾아 그 앞에 공백을 삽입하는 방식으로 간단하게 처리할 수 있습니다. 이때 파이썬 re 모듈의 sub() 메서드를 사용합니다.예를 들어 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.AReallyLongVariableNameInJava원하는 출력 결과는 다음과 같습니다.A Really Long Variable Name In Java정규식 [A-Z]를 사용하면 문자열 내의
이메일 주소는 상당히 복잡한 구조를 가지고 있으며, 전 세계적으로 통일된 단일 표준이 존재하지 않기 때문에 정규식(regex)으로 이메일을 정확하게 식별하는 것이 쉽지 않습니다. 다행히 RFC 5322 문서가 이메일 주소의 형식을 규정하고 있으며, 이 형식을 기반으로 텍스트에서 이메일 주소를 추출할 수 있습니다.예시 입력과 기대 출력예를 들어 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.Hi my name is John and email address is john.doe@somecompany.co.uk and my frie
사전순(lexicographical) 정렬이란?단어를 사전순으로 정렬한다는 것은, 먼저 각 단어의 첫 번째 글자를 기준으로 순서를 배열하는 것을 의미합니다. 첫 글자가 같은 단어들이 있다면 그 그룹 안에서 두 번째 글자를 기준으로 다시 정렬하고, 이 과정을 계속 반복합니다. 마치 실제 사전(데이터 구조로서의 딕셔너리가 아닌 언어의 사전)에서 단어가 배열되는 방식과 동일합니다.Python에서는 이러한 정렬을 위해 sort()와 sorted()라는 두 가지 함수를 제공합니다. 각각의 사용 방법과 어떤 상황에서 어떤 함수를 써야 하는지
문장의 단어를 오름차순으로 정렬하려면 먼저 공백을 기준으로 문장을 단어 단위로 분리해야 합니다. 여기서는 설명의 편의를 위해 공백만 기준으로 분리하고 구두점은 그대로 두겠습니다. 필요하다면 replace() 메서드나 정규표현식(regex)을 활용해 구두점도 함께 제거할 수 있습니다.정렬 방식: sort() vs sorted()문장을 단어 리스트로 분리한 후에는 sort() 또는 sorted() 메서드를 사용해 단어들을 사전순(lexicographical order)으로 정렬할 수 있습니다. 두 가지 중 무엇을 사용할지는 원본 배열
컴퓨터가 자연어를 처리할 때, 사용자의 검색 의도와 문서를 매칭하는 데 큰 가치가 없는 극히 흔한 단어들은 어휘 목록에서 아예 제외됩니다. 이렇게 제외되는 단어들을 불용어(Stop Words)라고 부릅니다.예를 들어 다음과 같은 입력 문장이 있다고 가정해 보겠습니다.John is a person who takes care of the people around him.불용어를 제거하면 다음과 같은 결과를 얻게 됩니다.[John, person, takes, care, people, around, .]NLTK의 불용어 활용하기NLTK는
파이썬 문자열 접두사·접미사 확인하기파이썬에서는 문자열이 특정 텍스트로 시작하는지 또는 끝나는지를 손쉽게 확인할 수 있는 내장 메서드를 제공합니다. 바로 startswith()와 endswith()입니다. 이 두 메서드는 파일 확장자 검사, URL 판별, 사용자 입력 검증 등 다양한 상황에서 유용하게 활용됩니다.startswith() – 특정 접두사로 시작하는지 확인startswith() 메서드는 문자열 객체에 호출하며, 검색하고 싶은 접두사(prefix) 문자열을 인수로 받습니다. 문자열이 해당 접두사로 시작하면 True, 그렇지
토큰화(Tokenization)란 무엇인가?토큰화는 주어진 문자열을 토큰(token)이라 불리는 작은 단위로 잘라내는 자연어 처리의 기본 작업입니다. 이 과정에서 쉼표나 물음표 같은 문장부호는 별도의 토큰으로 분리되거나 때로는 제거되기도 합니다.NLTK와 파이썬의 관점에서 보면, 토큰화란 각 토큰을 리스트에 담아두는 과정을 의미합니다. 이렇게 하면 텍스트를 글자 하나하나 순회하는 대신, 의미 있는 단위인 토큰별로 반복 처리할 수 있어 이후의 분석 작업이 훨씬 편리해집니다.입력 문자열 예시Hi man, how have you been
파이썬에서 문자열에 포함된 중복 단어를 제거하려면, 먼저 문자열을 공백 기준으로 분리해 단어 목록을 만든 뒤, 여러 가지 방법 중 하나로 중복을 걸러내면 됩니다. 이 글에서는 가장 널리 쓰이는 두 가지 방법을 예제 코드와 함께 살펴봅니다. 기본 처리 순서 중복 제거는 일반적으로 다음 단계로 진행됩니다. 문자열 분리 – split() 메서드로 문자열을 공백 단위로 나눠 리스트를 만듭니다. 대소문자 통일 – John과 john처럼 대소문자만 다른 단어도 같은 단어로 취급되도록 모두 소문자로 변환합니다. 중복 제거 – set() 또는
이번 글에서는 Python의 map 함수와 딕셔너리(dictionary)를 활용하여, 문장 내 각 단어의 ASCII 값 합계와 문장 전체의 총합을 구하는 방법을 알아봅니다.문제 정의예를 들어 다음과 같은 문장이 있다고 가정해 보겠습니다.hi people of the world각 단어의 ASCII 값 합계는 다음과 같습니다.209 645 213 321 552그리고 이 값들을 모두 더한 문장 전체의 총합은 1940입니다.풀이 접근 방법Python의 내장 함수 ord()는 문자 하나에 해당하는 ASCII(유니코드) 코드 값을 반환합니다.
문자열 처리를 하다 보면 두 문자를 서로 맞바꾸어야 하는 경우가 종종 있습니다. 예를 들어 문자 a1을 a2로, 반대로 a2를 a1으로 교체하고 싶은 상황이 그렇습니다.문제 상황다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.puporials toinp여기서 문자 p와 t를 서로 맞바꾸면 최종적으로 다음과 같은 결과를 얻고자 합니다.tutorials pointmap 함수와 람다 표현식 활용이러한 치환 작업은 map() 함수와 람다(lambda) 표현식을 조합하면 간단하게 해결할 수 있습니다. map(lambda, input) 함
간단한 프로그램을 활용하면 문장에서 욕설 등 부적절한 단어를 별표(*)로 바꿔 검열 처리할 수 있습니다.예를 들어 다음과 같은 문장이 있다고 가정해 보겠습니다.Go feed all the ducks in the lake여기서 ducks라는 단어를 별표로 바꾸고 싶다면, 최종 결과물은 다음과 같은 형태가 됩니다.Go feed all the ***** in the lake파이썬에서는 내장 함수인 replace()를 사용하면 이 기능을 아주 간단하게 구현할 수 있습니다. 핵심 포인트는 교체할 별표의 개수를 원래 단어의 길이와 동일하게 맞
파이썬에서 문자열의 대소문자 개수 세기문자열이 주어졌을 때, 파이썬을 활용하면 대문자와 소문자가 각각 몇 개 포함되어 있는지 손쉽게 확인할 수 있습니다. 예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.Hello World이 문자열에 대한 카운트 결과는 다음과 같아야 합니다.Upper case: 2 Lower case: 8구현 방법간단한 for 반복문과 두 가지 조건문만으로 대문자와 소문자를 각각 판별하여 개수를 셀 수 있습니다. 문자 하나씩 순회하면서 해당 문자가 영문 대문자 범위(A~Z)에 속하는지, 아니면 소문자 범위
파이썬에서는 문자 리스트를 문자열로 변환하는 작업이 매우 자주 필요합니다. 대표적인 예로 데이터를 저장하거나 전송할 때 사용하는 직렬화(serialization) 과정을 들 수 있습니다.예를 들어 다음과 같은 변환이 필요할 수 있습니다.[h, e, l, l, o, , w, o, r, l, d] → hello worldjoin() 메서드 활용하기파이썬에서는 join() 메서드를 사용하면 이러한 변환을 간단하게 처리할 수 있습니다. 이 메서드는 문자열 객체에 적용되며, 호출된 문자열(구분자)을 기준으로 리스트의 각 요소를 하나로 연결
이 글에서는 리스트가 완전히 비워질 때까지 매번 세 번째 요소를 제거하고 그 값을 출력하는 파이썬 프로그램을 다룹니다. 먼저 리스트를 생성하는데, 리스트의 인덱스는 0부터 시작하므로 첫 번째 세 번째 요소는 위치 2에 있습니다. 핵심은 리스트가 빌 때까지 순회하면서 매번 다음 세 번째 요소의 인덱스를 계산하고, 해당 값을 출력한 뒤 리스트의 길이를 하나씩 줄여나가는 것입니다. 참고로 이 문제는 원형으로 배치된 대상 중 매번 k번째를 제거해 나가는 유명한 요세푸스 문제(Josephus Problem)에서 k=3인 경우와 동일한 방식으
리스트에 포함된 모든 숫자를 곱하는 것은 파이썬 프로그래밍에서 자주 활용되는 기본 연산입니다. 이 글에서는 순회(traversing) 기법을 이용해 리스트의 모든 요소를 곱하는 방법을 단계별로 살펴보겠습니다.먼저 사용자 입력을 저장할 리스트를 생성하고, 곱셈 결과를 담을 변수의 초기값을 1로 설정합니다. 그다음 리스트의 첫 번째 요소부터 마지막 요소까지 차례대로 순회하면서 각 숫자를 곱셈 변수에 하나씩 곱해 나가면 됩니다.예제 입력: A=[5,6,3] 출력: 90 설명: 5*6*3 = 90 알고리즘 1단계: 리스트(lst)에 모든
Python은 문자열을 손쉽게 다룰 수 있도록 split()과 join()이라는 내장 함수를 기본적으로 제공합니다. split()은 하나의 문자열을 지정한 구분자를 기준으로 잘라 리스트로 반환하고, join()은 여러 문자열을 특정 구분자를 사이에 두고 하나로 합칩니다. # 문자열 분할 Str.split() # 문자열 결합 Str1.join(str2) 알고리즘 1단계: 문자열을 입력받습니다. 2단계: 분할에는 split() 메서드를, 결합에는 join() 함수를 사용합니다. 3단계: 결과를 화면에 출력합니다. 예제 1: s
이 글에서는 파이썬을 사용하여 이진수 문자열에 K개의 연속된 1이 존재하는지 확인하는 방법을 알아봅니다.먼저 사용자로부터 1과 0의 조합으로 이루어진 이진수 문자열을 입력받습니다. 그다음 1로만 구성된 새로운 문자열을 생성한 뒤, 원본 문자열 안에 p개의 연속된 1이 존재하는지 검사합니다. 존재하면 FOUND(찾음)를 출력하고, 존재하지 않으면 NOTFOUND(찾지 못함)를 출력합니다.예시이진수 ::1111001111 연속된 1의 개수 입력 :3 연속된 1을 찾았습니다알고리즘1단계: 1과 0의 조합으로 된 문자열을 입력받아 변수 X
리스트 컴프리헨션(List Comprehension)은 파이썬에서 가장 널리 사용되는 기법 중 하나입니다. 이 글에서는 이 기법을 활용해 0과 1이 무작위 순서로 섞여 있는 배열에서 0은 왼쪽에, 1은 오른쪽에 배치하도록 분리하는 방법을 알아봅니다.핵심 아이디어는 간단합니다. 배열을 한 번 순회하면서 값이 0인 요소만 모은 리스트와 값이 1인 요소만 모은 리스트, 총 두 개의 리스트를 만든 뒤, 이 두 리스트를 연결(concatenate)하면 원하는 결과를 얻을 수 있습니다.예제입력 :: a=[0,1,1,0,0,1] 출력 :: [0