PyQt를 하기 위한 정규표현식

행동하는 개발자·2022년 10월 18일
0

PySide, PyQt

목록 보기
11/20

정규표현식

메타문자인 대괄호 사이에는 어떤 문자도 들어갈 수 있다. 문자 클래스로 만들어진 정규식은 대괄호 사이의 문자들과 매치 라는 의미를 가진다.

ex) ab, abb, abbb, abbbb, abbbbb

a로 시작하고 b가 여러 개 있는 문자열이다. 하지만 이 문장은 사람이 보면 알 수 있지만, 컴퓨터는 이 문장을 파악할 수 없다. 때문에 정규표현식이라는 약속된 방법으로 알려주면 컴퓨터가 파악해낼 수 있다. 다음과 같은 문장을 ab+ 라고 알려주면 된다.

ex) 오늘 달러원 환율은 1023원이고 어제 달러원 환율은 1180원이다. 그리고 너는 3살이고 걔는 92kg 이다.

이 문자열에 포함된 10진수 숫자만 뽑아서 특정한 변수에 담아오고 싶다. 그럴 때, find("10진수 숫자",str) 같은 형태의 함수가 있었으면 좋겠다.

정규표현식으로 모든 10진수 숫자는

[0-9] - 모든 10진수 숫자

[a-zA-Z] - 모든 알바벳 문자열

[a-c] - a,b,c

[1-4] - 1,2,3,4

[가-힣]+ - 모든 한글 문자

이다.

따라서 우리는

p = re.compile("[0-9]+")

str = "오늘 달러원 환율은 1023원이고 어제 달러원 환율은 1180원이다. 그리고 너는 3살이고 걔는 92kg 이다."

m = p.findall(str) # m = re.compile("[0-9]+").findall(str)

print(m)

re 라이브러리에서 findall이라는 함수는 지정된 문자열에서, 특정한 속성을 가진 것을 모두 찾아서 list 형태로 리턴해주는 함수다. 이 때, 특정한 속성을 나타내는 방식을 정규표현식이라고 부른다.

+가 붙을 경우 10진수 여러개가 연달아서 반복해서 나오는 문자열을 의미하고 +가 없을 경우 10진수 아무거나 한개 씩을 말하는 것이다.

메타문자

정규표현식에서 사용하는 기호가 많은데, 이런 기호들을 정규표현식에서는 메타문자라고 부른다.

. ^ $ * + ? { } [ ] \ | ( )
  1. 대괄호

라면 이 표현식의 의미는 a,b,c 중 한 개의 문자와 매치를 의미한다. a와 before, dude가 있을 때, a는 a가 있으므로 매치되고 before는 b가 있으므로 매치되고 dude는 이 중 어느 하나도 포함하고 있지 않기 때문에 매치되지 않는다.

대괄호 사이에 하이픈을 사용하면 두 문자 사이의 범위를 의미한다.

[abc]

정규 표현식의 .문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다.

예를 들어 a.b는 a랑 b 사이 아무거나 다 들어간 케이스를 의미한다.

만약 진짜 a.b를 찾고 싶다면

a[.]b

라고 찾으면 된다.

re.sub 뜻

re.sub(pattern, new, string)

string에서 pattern에 해당하는 부분을 new로 대체하라

QLineEdit in PyQt

QLineEdit: 마우스를 클릭하면 키보드로 데이터를 입력할 수 있는 창

self.textedit1 = QLineEdit(self)
self.textedit1.setValidator(QIntValidator(self)) # 정수만 입력된다.
self.textedit1.setValidator(QIntValidator(1,100,self))  # 1 ~ 100 사이의 정수 입력

다음과 같은 식을 정규표현식으로 제한할 수 있다.

self.textedit = QLineEdit()
re = QtCore.QRegExp("[0-9a-fA-F]*")
self.textedit.setValidator(QtGui.QRegExpValidator(re))

위 예시의 경우,

0~9까지의 숫자 & 소문자 a ~ f & 대문자 A ~ F 알파벳만 키보드 입력이 가능하다.

출처: https://newbie-developer.tistory.com/m/102, https://newbie-developer.tistory.com/m/103, https://newbie-developer.tistory.com/m/149

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글