보통은 다른 도구를 대체 할 수 있지만, 다른 도구는 정기적으로 대체 할 수 없습니다.
1. 도구 문자열 일치 또는 추출, 모든 언어에 대한 도구를 기반으로.
정규 표현식은 문제에 직면하고있다
문자열이 주어진 형식의 사용자 등록 등의 계좌 만족 포맷 여부 판단과 일치하는지 여부를 결정한다.
사용자가 제출 한 심판 사서함 형식은 올바른 :
문자 나 숫자 또는 .COM 더 @ 하나 개 이상의 문자 또는 숫자, R '^ [A-ZA-Z0-9] + @ [A-ZA-Z0-9] + \. com $'
# 리더 패킷을 다시 가져 오기
re.findall의 RES = 용 (R & LT '^ [A-ZA-Z0-9] @ + [A-ZA-Z0-9] + \. com $', ' [email protected] ') #가 일치하도록 변환 될 수있다 목록 항목.
참고 : 괄호 안의 정규 표현식을 사용하는 경우, 결과는 오히려 전체 경기보다 findall은 기능이 괄호에 일치합니다.
그래서 우리는 필요한 데이터 부분의 추출을 완료하려면이 메커니즘을 사용할 수 있습니다.
함수 : re.findall (패턴, 문자열) #
= re.findall (r'aaa 'mystr) # 첫번째 파라미터는 정규식 mymail는 제 2 인수는 컨텐츠를 발견하는 문자열이다.
2. 메타 문자
자체 문자의 특별한 의미가 있습니다 :
^ 탈자 부호
일부 메타 :? * + [] () \ ^ $
\함으로써 자신에 맞게 이러한 문자를 탈출.
일반 규칙이 공간을 마련하기 위해 노력하지 않는 작성하려면
\ 탈출, 정규 표현식 규칙을 탈출
R 파이썬 문자열을 탈출, 두 층을 탈출해야합니다.
()에 의해 findall은의 동작을 변경하려면
점은 문자가 있어야합니다, 강제 점령, 어떤 한 단어를 나타냅니다.
앵커 메타 문자
줄의 잠금 시작 ^ 첫 번째 행에 위치
라인의 잠금 끝 $의 행의 끝에 위치
단어 경계 (하지 메타 문자) : \ B를
A = '안녕하세요 세계 내가 abcd와 있어요 오늘은 helloworld를 말'
= re.findall의 MyMail (R & LT '는 \ bhello B는 \', A) # 단지 헬로 일치 헬로 때문에 나중에 단어이다.
3. 반복 메타 문자
중괄호 {}를 주파수 제어 선행 문자를 수정한다.
A = 'abbbbbbbbc'
mymail = re.findall (r'ab {8} C ')는, {8} 상기 8 (B)가, {2,8}는 2-8 사이의 일치를 나타내고있다 나타낸다. {2, 2}를 나타내는 배면 무한대는. 이전이 {}에 여유 공간이 일치합니다 null 문자 (사실, 다른 문자의 위치이다)을 포함하여, 여덟 즉 0-8을 표시 쓰지 마십시오.
[0-9] 내지 9 숫자 0을 나타낸다
또한 * + 3 배 특별 대표가 있습니까?
mymail = re.findall (R ', STR)
* 무한대에 0을 나타냅니다, 수정 된 규칙 이전 문자 {0}
무한대 주제 N + 1. {1}
? 아니 더는 경기보다 더 많은 경우,보다 대신에. {0,1}
N {N} 일
M ~ N의 일 : {M, N}
적어도 M {M}
4. 욕심 아닌 욕심
몇 글자가 일치로, 비 욕심 모드가 될 물음표를 추가합니다.
비 탐욕 : 나중에 메타 문자를 추가, 당신이 아닌 욕심 모드가되고 다른 규칙 뒤에 물음표를 추가 할 수 있습니다 ..
임의의 수 : *?
하나 이상의 : +?
아니면 번호 : ??
+ + 탐욕 규칙 메타 문자
mystr = 'abbbb'
mymail = re.findall (r'ab의 *? 'mystr)
5. | 선택 메타 문자
A는 = '행복 오늘은 행복 하하하'
mymail = re.findall (r'happy | 하하 | 오늘, A)
6. 버스트 []
[abc],整个中括号相当于一个字符,查找其中的一个,一个一个位置分开匹配.两个中括号相当于2个字符.
[0-9]{3},用大括号来控制次数.表示3个数字.
[A-Za-z0-9]表示大小写加数字,可表示邮箱或者首字母的命名规范.
不可以随意加逗号,只有在大括号{}表示区间的时候加逗号.
7.反向字符类 [^]
如果脱字符^写在字符组外面,代表锁定行首
如果写在字符组里面,代表反向字符类,(即 除括号内字符之外)
字符组[...] 反向字符类:...
有一对(),代表只会提取括号里面的内容.括号外面的当作一个标记
转义\,取消某些特殊字符的含义,让其变成普通字符.
mymail = re.findall(r'href = "(.*?)"',mystr),括号代表只提取括号里面的内容,外面的只是标记.
还有re.match,代表从开头开始匹配.
re.search ,代表任意位置只匹配一个,找不到就返回NONE,只匹配第一个
re.sub 替换, re.sub(r'href', 'haha', mystr),比字符串的replace好用.原本的字符串替换成新的字符串.
8.预定义字符组问题引入
\d \D 任意数字\非数字字符组
\s \S任一空白,非空白字符
\w \W 任一字母数字\非字母数字字符